javascript - 几秒钟后,快速会话变得未定义
问题描述
我在 nodejs 项目中使用 express-session 1.17.1。我可以正确存储会话,但几秒钟后,会话变得未定义。
这是服务器代码:
...
self.app.use(session({
secret: conf.SERVER.SECRET_WORD,
resave: false,
saveUninitialized: false,
expires: new Date(Date.now() + 36000000)
}));
server = http.createServer(self.app);
...
这是登录完成后存储会话的代码:
...
if(!err) {
user.password="";
req.session.user=user._id.toString();
req.session.role=user.role;
res.status(200).send(user);
} else {
errorHandler.processError(err, res, log);
}
...
这是检查会话是否为空的代码:
...
if(req.session.user==null){
errorHandler.processError(res.__("GENERAL.SESSION_NULL"), res, null, 401);
}else{
// do something.
...
当我启动服务器并发出第一个请求时,一切正常并且会话不为空,它存储了用户。但是几秒钟后,如果我执行相同的请求,会话变得未定义。增加 expires 参数不会修改行为。你知道会发生什么吗?
谢谢!
解决方案
好的,我已经看到会发生什么。express-session 不支持集群节点服务器(我不知道),我的服务器是集群的。所以我创建了一个会话,在线程 1 中为实例登录,但是如果另一个请求转到线程 2,这里的会话是未定义的。我已将其更改为使用 connect-mongo 并将会话存储在 mongodb 中。谢谢。
推荐阅读
- javascript - 如何按“时刻”日期值对对象数组进行排序?
- node.js - 如何在单击一次时禁用自适应卡片?
- javascript - 上传 JSPDF 文件到服务器 JS 和 PHP 搞乱格式
- python - 用 Python 比较多列(字符串)
- vue.js - Vue Router 动态路由访问 PARAMS
- python - 在 Python 中的 Kivy 的 RelativeLayout 中将画布上下文从窗口移动到小部件,单独(无 .kv 文件)
- spring-boot - MultipartFile Wrapper Object 作为@ModelAttribute 但不是@RequestParam
- macos - MacOS 10.5.6 我没有使用Game Center Entitlement and Running Smoothly。我需要检查旧版本的 MacOS 10.15.3 但我不能
- javascript - 反应:无法捕获输入框的当前事件值
- python - Web Scraper:打印熊猫列表时出错