会话变量未在expressjs中设置

时间:2014-05-23 22:17:59

标签: node.js session express

我尝试过很多方法来设置会话变量,但是找不到解决方案却没有成功。更准确地说,问题是会话(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);
...

所以有人可以告诉我我做错了什么以及如何解决它? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您使用的是http,则不应设置secure: true,因为只会为http s 请求发送包含secure: true的Cookie。如果您想保留secure: true,则需要启动http s 服务器。如果您只是出于开发目的而这样做,那么您可以暂时删除secure: true,直到您将代码投入生产(使用https)。

同样在一个不相关的说明中,您可以通过仅在成功验证后启动会话和验证路由来避免重新生成()和会话固定问题。这还有助于减少会话商店中从未登录或访问者的会话数(除非您需要为未经身份验证的用户存储会话数据)。