ExpressJS'de bir oturum nasıl sonlandırılır


89

Bunun belgelerde bir yere gömülmesi gerektiğini hissediyorum ama bulamıyorum.

ExpressJS'de bir oturumu nasıl kapatır, sonlandırır veya öldürür (ne olursa olsun)?

Yanıtlar:


125

Express 4.x Güncellenmiş Cevap

Oturum işleme artık Express'te yerleşik değildir. Bu cevap standart oturum modülüne atıfta bulunur: https://github.com/expressjs/session

Oturum verilerini temizlemek için şunu kullanmanız yeterlidir:

req.session.destroy();

Dokümantasyon bu konuda biraz işe yaramaz. Diyor ki:

Oturumu yok eder, istek oturumu kaldırılır, sonraki istek yeniden oluşturulur. req.session.destroy(function(err) { // cannot access session here })

Bu mu değil sonraki istek üzerine yüklenen yeniden Mevcut oturumun olacağı anlamına gelir. Bu, sonraki istekte oturum deponuzda temiz bir boş oturum oluşturulacağı anlamına gelir. (Muhtemelen oturum kimliği değişmiyor, ancak bunu test etmedim.)


Oturumu anında talepten değil oturumlardan kaldırmanın bir yolu var mı? Örneğin, tüm cihazlardan çıkış yap işlevselliğini uygulayacak olsaydım buna ihtiyacım olurdu
Muhammed Umer

1
@MuhammadUmer Bildiğim kadarıyla, keyfi bir oturumu yok etmek için yerleşik bir mekanizma yok. Bunu, oturumla ilişkili anahtarları depodan silerek veya kendi oturum sarmalayıcınızı oluşturarak kolayca uygulayabilirsiniz.
Brad

94

Boşver, bu req.session.destroy();


8
Bu benim için ekspres 3'te çalışmıyor .. ´req.session.destroy () ´'u aramaya çalışıyorum
acidghost

6
ExpressJS 3.00'de benim için iyi çalışıyor. req.session.destroy();Asit hayaletin yaptığı gibi kullanılır .
hekzasiyanür

1
req.session.destroy () kullanımı benim için ekspres 2.5'te de işe yarıyor
TulioPa

1
Bu nerede belgeleniyor? Onu bulmaya çalışıyorum.
huggie

25

Soru, ne tür bir oturum deposunun kullanıldığını açıklamadı. Her iki cevap da doğru görünüyor.

Çerez tabanlı oturumlar için:

Gönderen http://expressjs.com/api.html#cookieSession

req.session = null // Deletes the cookie.

Redis vb. Tabanlı oturumlar için:

req.session.destroy // Deletes the session in the database.

1
req.session.destroy esasen "req.session silme" için bir sarmalayıcıdır, buradaki kaynak koduna bakın: github.com/expressjs/session/blob/master/session/session.js
tfmontague


7

kullanım

delete req.session.yoursessionname;

Bununla ilgili bir belgeyi gerçekten görmek isterim.
Tembel

5
@Nithin'den aşağı oy kullanan herkes için; github'da (github.com/expressjs/session/blob/master/session/session.js) belgelendiği şekliyle session.destroy () işlev yöntemi "this.req.session'ı sil" kullanır - tam olarak Nithin'in cevabı değildir, ancak "sil" seçeneğinin kullanılması da doğru bir çözümdür (ve diğer yanıtlarda ele alınmaz).
tfmontague

Doğru çözüm bu mu? Hafıza sızıntısı yok, yaramaz şeyler olmayacak mı?
Rajath

6

Session.destroy (geri arama)

Oturumu yok eder ve req.session özelliğini kaldırır. Tamamlandığında, geri arama çağrılacaktır.

Güvenli yol ↓ ✅

req.session.destroy((err) => {
  res.redirect('/') // will always fire after session is destroyed
})

↓ Güvensiz yol ↓ ❌

req.logout();
res.redirect('/') // can be called before logout is done


0
req.session.destroy(); 

Yukarıdakiler benim için işe yaramadı, bu yüzden bunu yaptım.

req.session.cookie.expires = new Date().getTime();

Çerezin sona erme tarihini geçerli saate ayarlayarak, oturum kendi kendine sona erdi.


-5

Birkaç yerde bahsedildiği gibi, req.session.destroy () işlevinin de düzgün çalışmasını sağlayamıyorum.

Bu benim etrafındaki çalışmam ... hile yapıyor gibi görünüyor ve hala req.flash'in kullanılmasına izin veriyor

req.session = {};

Silmek veya varsa set req.session = null; , öyle görünüyor ki req.flash kullanamazsınız


1
Bu bir güvenlik sorunudur, çünkü oturum karmasını değiştirmez
Tosh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.