【发布时间】:2012-07-19 12:30:24
【问题描述】:
我有一个主干视图,它向服务器发送 Ajax 调用以删除会话。
在服务器上触发以下事件:
app.delete('/session', function(req, res) {
if (req.session) {
req.session.destroy(function() {
res.clearCookie('connect.sid', { path: '/' });
res.send('removed session', 200);
});
} else {
res.send('no session assigned', 500);
}
});
这很奇怪,我可以多次按下注销按钮而不会收到 HTTP 500 错误代码。 Chromium 还告诉我一个 cookie 仍然存在。
出了什么问题?
问候
编辑:
我发现这不是直接的会话问题,而是 cookie 问题。 我在路由中添加了 res.clearCookie。不幸的是行为(cookie,会话保持活动)没有改变
EDIT2: 我现在给 res.clearCookie 一些参数 => res.clearCookie('connect.sid', { path: '/' }); 现在至少cookie在浏览器中消失了。但是会话似乎仍然可用。 或者至少我可以调用注销路由,我想要什至 req.session 应该是 false 的频率
EDIT3: 我现在从 redis 中删除了所有会话并重新启动了所有内容(redis、节点、浏览器)。 比我再次登录并注销。到目前为止这有效,但是当我用 F5 重新加载页面时,我得到了一个新会话。为什么?
【问题讨论】:
-
如果你这样做会发生什么
delete req.session; -
这不会影响会话,至少不会影响下一个请求,因为您只是在本地删除变量而不是 redis 键。 req.session.destroy 也将其删除。但是看到更新
-
你不一定要清除 cookie,如果一个不存在的会话,connect 会给你一个新的会话,也许这就是你认为的同一个会话?
-
@kyogron 只是一个简单的标志,例如
authenticated: true -
@niconic senchalabs.org/connect/session.html
标签: javascript node.js session express