Saya merasa ini harus dikubur di suatu tempat di dokumentasi, tetapi saya tidak dapat menemukannya.
Bagaimana Anda menutup atau mengakhiri atau mematikan (apa pun) sesi di ExpressJS?
Jawaban:
Penanganan sesi tidak lagi dibangun di Express. Jawaban ini mengacu pada modul sesi standar: https://github.com/expressjs/session
Untuk menghapus data sesi, cukup gunakan:
req.session.destroy();
Dokumentasi agak tidak berguna dalam hal ini. Ia mengatakan:
Menghancurkan sesi, menghapus req.session, akan menghasilkan kembali permintaan berikutnya.
req.session.destroy(function(err) { // cannot access session here })
Ini tidak berarti bahwa sesi saat ini akan dimuat ulang pada permintaan berikutnya. Ini berarti sesi kosong bersih akan dibuat di penyimpanan sesi Anda pada permintaan berikutnya. (Agaknya ID sesi tidak berubah, tapi saya belum mengujinya.)
Sudahlah, itu req.session.destroy();
req.session.destroy();
seperti yang dilakukan acidghost.
Pertanyaan tersebut tidak menjelaskan jenis penyimpanan sesi apa yang digunakan. Kedua jawaban tersebut tampaknya benar.
Untuk sesi berbasis cookie:
Dari http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
Untuk Redis, sesi berbasis dll:
req.session.destroy // Deletes the session in the database.
Dari http://expressjs.com/api.html#cookieSession
Untuk menghapus cookie, cukup tetapkan sesi ke null sebelum merespons:
req.session = null
menggunakan,
delete req.session.yoursessionname;
Menghancurkan sesi dan akan membatalkan pengaturan properti req.session. Setelah selesai, callback akan dipanggil.
↓ Cara aman ↓ ✅
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓ Cara tidak aman ↓ ❌
req.logout();
res.redirect('/') // can be called before logout is done
Menggunakan req.session = null;
, tidak akan benar-benar menghapus instance sesi. Solusi yang paling tepat adalah req.session.destroy();
, tetapi ini pada dasarnya adalah pembungkus untuk 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();
Di atas tidak berhasil untuk saya, jadi saya melakukan ini.
req.session.cookie.expires = new Date().getTime();
Dengan mengatur kedaluwarsa cookie ke waktu saat ini, sesi berakhir dengan sendirinya.
Seperti disebutkan di beberapa tempat, saya juga tidak bisa membuat fungsi req.session.destroy () bekerja dengan benar.
Ini adalah pekerjaan saya .. tampaknya melakukan trik, dan masih memungkinkan req.flash digunakan
req.session = {};
Jika Anda menghapus atau menyetel req.session = null; , tampaknya Anda tidak dapat menggunakan req.flash