非常简单。我在/user/login
路由中设置了一个cookie:
if (rememberMe) {
console.log('Login will remembered.');
res.cookie('user', userObj, { signed: true, httpOnly: true, path: '/' });
}
else {
console.log('Login will NOT be remembered.');
}
我已经为cookie解析器设置了密码:
app.use(cookieParser('shhh!'));
非常基本的东西。只要我能够检索我存储在cookie中的任何内容,一切都运行得很好:
app.use(function (req, res, next) {
if (req.signedCookies.user) {
console.log('Cookie exists!');
req.session.user = req.signedCookies.user;
}
else {
console.log('No cookie found.');
}
next();
});
这个中间件在其他任何东西之前被调用,所以为了参数的缘故,如果cookie有效,“Cookie存在!”总是被记录在我的控制台中。
问题是当我试图删除cookie时。我尝试过res.clearCookie('user')
,res.cookie('user', '', { expires: new Date() })
,我也尝试过传递相同的标志(我在/user/login
中传递给res.cookie()
)。我尝试过使用这些方法的组合,但没有任何效果。
目前,我能够清除Cookie(并且不接收“Cookie存在!”日志消息)的唯一方法是清除浏览器历史记录。以下是我的注销路径:
route.get('/user/logout', function (req, res, next) {
res.clearCookie('user');
req.session.destroy();
util.response.ok(res, 'Successfully logged out.');
});
似乎我甚至不能修改cookie值;我把res.cookie('user', {}, { signed: true, httpOnly: true, path: '/' })
在我的注销路由中,但cookie值保持不变。
8条答案
按热度按时间6ss1mwsb1#
我意识到,经过很长一段时间和恼人的时间,我的前端是不是发送cookie到终点是我试图清除cookie...
在服务器上:
在前端,
添加“凭证:'same-origin'“是clearCookie为我工作的原因。如果cookie没有被发送,它就没有什么要清除的。
希望这能帮上忙真希望我早点找到这个...
ki1q1bka2#
虽然这对这个问题的作者没有帮助,但我希望这能帮助一些人。我遇到了同样的问题,我无法删除我的React应用程序中的cookie,我使用了axios,几个小时后,我终于能够修复它。
是
{ withCredentials: true }
让它为我工作。这是我的Express代码:
tvmytwxo3#
通过(广泛的)搜索和突然出现在我脑海中的一个随机想法来判断,答案是使用
也就是说
请注意cookie中指定的**.**,因为我们将其用于子域(您也可以将其用于不带点的子域,但使用点更安全)。
TLDR;您必须在后端提供 route和domain:,以便在前端向同一端点发出请求。
iibxawm44#
请确保发送要清除的凭据
即使它只是一个
/logout
端点,您仍然需要发送凭据。iqxoj9l95#
做了一个噩梦,让这个工作,以及这对我的工作,希望有助于某人。
快速路由器
React前端处理注销。
我在auth调用中设置cookie,如下所示。
重要的是,您需要在clearCookie方法中添加路径和域。
bksxznpy6#
路径必须正确。在我的例子中,这是路径中的一个错字
h43kikqp7#
2022年11月(Chrome浏览器)-我的工作方式
前端:
后端:
1cosmwyk8#
我是新来的,但添加一个返回(
return res.sendStatus(204);
)到后端功能是什么删除了cookie对我来说,希望它有帮助。没有返回它不删除cookie,但只日志“会话结束”