我尝试过很多方法来设置会话变量,但是找不到解决方案却没有成功。更准确地说,问题是会话(custome)变量没有被传递给其他路由(因此它们不会被存储在默认的MemoryStore中)。 所有代码均可在https://github.com/codexa/pictroid/blob/session/app.js
处获得这是用于分配会话变量(https://github.com/codexa/pictroid/blob/session/app.js#L304-311)
的代码部分console.log(req.session);
req.session.regenerate(function(){
// Store the user's primary key
// in the session store to be retrieved,
// or in this case the entire user object
req.session.user = "some user";
req.session.auth = true;
});
我知道这是异步的,并且会执行正在进行的代码,但这会使它同步并不能解决问题。
作为示例,我正在尝试在根目录路由(https://github.com/codexa/pictroid/blob/session/app.js#L87-L88)中检索自定义“req.session.user”
app.get('/', function(req, res) {
console.log(req.session.auth);
...
所以有人可以告诉我我做错了什么以及如何解决它? 提前谢谢。
答案 0 :(得分:2)
如果您使用的是http,则不应设置secure: true
,因为只会为http s 请求发送包含secure: true
的Cookie。如果您想保留secure: true
,则需要启动http s 服务器。如果您只是出于开发目的而这样做,那么您可以暂时删除secure: true
,直到您将代码投入生产(使用https)。
同样在一个不相关的说明中,您可以通过仅在成功验证后启动会话和验证路由来避免重新生成()和会话固定问题。这还有助于减少会话商店中从未登录或访问者的会话数(除非您需要为未经身份验证的用户存储会话数据)。