Design an Express route to destroy a session when a user logs out. Which snippet is correct?
Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Đáp án đúng: "
app.get('/logout', (req, res) => {
req.session.destroy((err) => {
if (err) {
console.log(err);
}
else {
res.redirect('/login');
}
}
);
});". Gói express-session gắn vào req.session một đối tượng Session có phương thức destroy(callback): nó xoá dữ liệu phiên khỏi store, bỏ req.session rồi mới gọi callback. Lần theo đoạn đúng: route GET /logout gọi destroy, chờ trong callback, nếu có err thì ghi log, nếu không mới chạy res.redirect('/login'), nên việc chuyển hướng chỉ xảy ra khi phiên đã thật sự bị huỷ. Đoạn gọi "req.session.delete()" sai vì Session của express-session không có phương thức delete, lệnh này ném TypeError trước khi kịp chuyển hướng. Đoạn gọi "req.session.remove()" cũng sai vì remove không nằm trong API của Session, kết quả là lỗi không phải hàm như trên. Đoạn gọi "req.session.invalidate()" mượn cách viết của HttpSession trong Java Servlet, mang sang Express thì không tồn tại; hơn nữa nó gọi res.redirect ngay mà không chờ store xoá xong.