我对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 的经验,我以前从未遇到过这个问题,因为它似乎并不关心这个问题。
如何解决此问题?
好的。所以终于想出了该怎么做。在阅读了很多关于我没有以 UTC 运行我的服务器是多么愚蠢的信息后,我决定试一试。我在 ubuntu 上,这是让 cookie 正常工作的解决方案。
跑:
sudo dpkg-reconfigure tzdata
从"地理区域"列表中选择"等"选择 UTC 并按回车键
更新我注意到我的服务器时间漂移得很厉害(虚拟机),所以我还必须使用 ntp 守护程序来让它正确保持时间。设置如下:
sudo apt-get install ntp
您需要停止 ntp 守护程序才能在第一次手动更新它。您也可以重新启动服务器,但它是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 选项。不幸的是,这也需要重新启动。