【问题标题】:NodeJS session variables won't stickNodeJS 会话变量不会粘住
【发布时间】:2012-04-20 13:57:41
【问题描述】:

我遇到了 nodejs 和 connect 的问题,而且它没有在请求之间保留会话变量。现在我不想使用数据库来存储我的会话。我只想使用 MemoryStore。

我的服务器:

var server = connect()
.use(connect.cookieParser('justmeknowsthis'))
.use(connect.session({ cookie: { maxAge: config.data.sessionTimeout /* 1800000 */ }}))
.use(auth.authorize)
.use(routes.routes)
.use(function(req, res, next) {
    utils.data.returnJsonError(res, 404, true, {
        message: 'Call not supported'
    });
});

我正在设置这样的会话变量:

req.session.auth = true;
req.session.username = data.username;

在找到有关该问题的更多信息后,我注意到它可能与时区有关,因为如果我只是增加超时,它就会开始工作。根据我过去使用 ASP.Net 的经验,我以前从未遇到过这个问题,因为它似乎并不关心这个问题。

我该如何解决这个问题?

【问题讨论】:

    标签: node.js timezone connect utc


    【解决方案1】:

    好的。所以终于想出了怎么做。在阅读了很多关于我没有在 UTC 中运行我的服务器是多么愚蠢之后,我决定试一试。我在 ubuntu 上,这是让 cookie 正常工作的解决方案。

    运行:

    sudo dpkg-reconfigure tzdata
    

    从“地理区域”列表中选择“Etc” 选择 UTC 并按 Enter 键

    更新 我注意到我的服务器时间漂移很大(虚拟机),所以我还必须使用 ntp-daemon 让它正确地保持时间。设置如下:

    sudo apt-get install ntp
    

    您需要停止 ntp-daemon 才能在第一次手动更新它。您也可以重新启动服务器,但它是 Linux,因此您不必这样做。运行以下命令来停止守护进程:

    sudo /etc/init.d/ntp stop
    

    手动更新服务器时间(使用http://www.pool.ntp.org/en/附近的服务器):

    ntpdate ntp.ubuntu.com pool.ntp.org
    

    只需重新启动守护程序:

    sudo /etc/init.d/ntp start
    

    同时更新文件 /etc/ntp.conf 并包含您的本地时间服务器。

    再次更新 跑了一天后,我注意到时间还没有结束。我现在已经关闭了 VM 机器的 UTC 选项。不幸的是,这也需要重新启动。

    【讨论】:

    • 很高兴你把它整理好了。很高兴知道 UTC 是使 cookie 生命周期正常工作所必需的。
    猜你喜欢
    • 2023-03-14
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2015-05-27
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多