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?
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();
sumber
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.
sumber
Dari http://expressjs.com/api.html#cookieSession
Untuk menghapus cookie, cukup tetapkan sesi ke null sebelum merespons:
req.session = null
sumber
menggunakan,
delete req.session.yoursessionname;
sumber
Session.destroy (panggilan balik)
↓ 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
sumber
Menggunakan
req.session = null;
, tidak akan benar-benar menghapus instance sesi. Solusi yang paling tepat adalahreq.session.destroy();
, tetapi ini pada dasarnya adalah pembungkus untukdelete 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; };
sumber
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.
sumber
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
Jika Anda menghapus atau menyetel req.session = null; , tampaknya Anda tidak dapat menggunakan req.flash
sumber