如何刪除由 express-session 產生的 cookie?

R4 Cheng
Mar 17, 2022

--

Photo by Ariana Suárez on Unsplash

當你使用 express-sessiondestroy() method 來刪除儲存在 Backend 的 session (也許存在 DB) ,並且使用 expressclearCookie 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'});
});
});
};

References

  1. https://stackoverflow.com/questions/58311308/node-js-express-session-remove-cookie-from-client-browser
  2. https://cesare.substack.com/p/how-to-implement-a-logout-method?s=r
  3. https://github.com/expressjs/session/issues/507

--

--

R4 Cheng
R4 Cheng

Written by R4 Cheng

「0」が過去で「1」が未来「今」は何処にもない

No responses yet