當你使用 express-session
的 destroy()
method 來刪除儲存在 Backend 的 session (也許存在 DB) ,並且使用 express
的 clearCookie
method 來刪除儲存在 Frontend (browser) 的 cookie 時,有可能會遇到明明 Backend 的 session 已經刪除,Frontend 的 cookie 卻還依然存在的奇怪情況。
這是因為使用 clearCookie
時,若使用 default option ,可能會造成要刪除的 cookie 產生不一樣的 key-value!
例如:
想刪除 name=apple
domain=.example.com
的 cookie,若使用 clearCookie("apple");
可能會刪除 name=apple
domain=one.example.com
的 cookie,於是我們所希望刪除的 cookie 就仍然存在!
解法
給予 clearCookie
的 option parameter 完整的 key-value
例如:
import { Express, Router } from "express";
const route = Router();
export default (app: Express) => {
app.use("/api/auth/", route);
route.delete("/logout", (req, res) => {
req.session.destroy((err) => {
if (err) {
res.send({ error: 'Logout error' });
return;
}
res.clearCookie("apple", {
domain: ".example.com"
}).send({success: 'cleared cookie'});
});
});
};