当我使用 Express cookie-session 时,是否足以删除 cookie 客户端以注销?

When I use Express cookie-session, is it enough to delete the cookie client-side in order to logout?

我正在使用 Express cookie-session 进行身份验证,如果我理解正确的话,它通过在用户浏览器本地存储一个 cookie 和 no 会话数据来工作客户端。

文档说为了注销我们应该在服务器上设置 req.session = null。所以现在,我的客户端向该端点发出 HTTP 请求。

客户:

async function logout() {
    await fetch(
        process.env.REACT_APP_SERVER_URL + "/logout",
        {
            method: "POST",
        }
    )
}

服务器:

exports.logout = (req, res, next) => {
    req.session = null
    res.sendStatus(200)
}

但是如果服务器宕机,这显然会失败。 所以现在我想知道 只删除客户端会话 cookie 甚至完全删除注销端点是否足够 。如果服务器上没有存储会话数据,这应该也能正常工作,不会留下任何残留物,对吧?

是的,没错,您可以删除 cookie,下次客户端访问服务器时,将不会有会话来识别用户,因此用户将被注销。

但是,一般来说,出于安全原因,客户端不应该能够使用会话 cookie,而且几乎总是会话 cookie 被标记为 httpOnly,这意味着它不能被操作 javascript 在 client-side.

您可以采取的一个额外预防措施(如果您决定让客户端使用会话 cookie)是 sign cookie,因此即使客户端更改了 cookie 的内容,cookie 签名将无效,将被服务器拒绝。