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:
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.)
Boşver, bu req.session.destroy();
req.session.destroy();
Asit hayaletin yaptığı gibi kullanılır .
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.
Gönderen http://expressjs.com/api.html#cookieSession
Bir çerezi temizlemek için yanıt vermeden önce oturumu null olarak atamanız yeterlidir:
req.session = null
kullanım
delete req.session.yoursessionname;
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
Kullanmak req.session = null;
, aslında oturum örneğini silmez. En uygun çözüm olacaktır req.session.destroy();
, ancak bu aslında için bir paketleyicidir delete req.session;
.
https://github.com/expressjs/session/blob/master/session/session.js
Session.prototype.destroy = function(fn){
delete this.req.session;
this.req.sessionStore.destroy(this.id, fn);
return this;
};
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.
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