2

我对 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 的经验来看,我以前从未遇到过这个问题,因为它似乎并不关心这个问题。

我怎样才能解决这个问题?

4

1 回答 1

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 选项。不幸的是,这也需要重新启动。

于 2012-04-09T14:42:28.960 回答