Tôi cảm thấy như điều này phải được chôn ở đâu đó trong tài liệu, nhưng tôi không thể tìm thấy nó.
Làm cách nào để bạn đóng hoặc kết thúc hoặc hủy (bất cứ điều gì) một phiên trong ExpressJS?
Câu trả lời:
Xử lý phiên không còn được tích hợp vào Express. Câu trả lời này đề cập đến mô-đun phiên tiêu chuẩn: https://github.com/expressjs/session
Để xóa dữ liệu phiên, chỉ cần sử dụng:
req.session.destroy();
Tài liệu này hơi vô ích về điều này. Nó nói rằng:
Hủy phiên, xóa req.session, yêu cầu tiếp theo sẽ được tạo lại.
req.session.destroy(function(err) { // cannot access session here })
Điều này không có nghĩa là phiên hiện tại sẽ được tải lại trong lần yêu cầu tiếp theo. Nó có nghĩa là một phiên trống sạch sẽ được tạo trong cửa hàng phiên của bạn theo yêu cầu tiếp theo. (Có lẽ ID phiên không thay đổi, nhưng tôi chưa kiểm tra điều đó.)
Đừng bận tâm, nó là req.session.destroy();
req.session.destroy();
như acidghost đã làm.
Câu hỏi không làm rõ loại cửa hàng phiên nào đang được sử dụng. Cả hai câu trả lời dường như đúng.
Đối với các phiên dựa trên cookie:
Từ http://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
Đối với các phiên dựa trên Redis, v.v.:
req.session.destroy // Deletes the session in the database.
Từ http://expressjs.com/api.html#cookieSession
Để xóa một cookie, chỉ cần gán phiên này thành null trước khi phản hồi:
req.session = null
sử dụng,
delete req.session.yoursessionname;
Sử dụng req.session = null;
, sẽ không thực sự xóa phiên bản. Giải pháp thích hợp nhất sẽ là req.session.destroy();
, nhưng đây về cơ bản là một trình bao bọc cho 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;
};
Hủy phiên và sẽ hủy đặt thuộc tính req.session. Sau khi hoàn tất, lệnh gọi lại sẽ được gọi.
↓ Cách an toàn ↓ ✅
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓ Cách không an toàn ↓ ❌
req.logout();
res.redirect('/') // can be called before logout is done
req.session.destroy();
Ở trên không làm việc cho tôi vì vậy tôi đã làm điều này.
req.session.cookie.expires = new Date().getTime();
Bằng cách đặt thời gian hết hạn của cookie thành thời điểm hiện tại, phiên sẽ tự hết hạn.
Như đã đề cập ở một số nơi, tôi cũng không thể làm cho hàm req.session.destroy () hoạt động chính xác.
Đây là công việc của tôi xung quanh .. dường như làm được thủ thuật và vẫn cho phép sử dụng req.flash
req.session = {};
Nếu bạn xóa hoặc đặt req.session = null; , có vẻ như sau đó bạn không thể sử dụng req.flash