【发布时间】:2018-03-30 20:31:04
【问题描述】:
当我重新启动服务器时,我的会话结束并退出。这不会在常规页面刷新时发生。我正在使用 connect-mongo 来解决这个问题:
var session = require('express-session');
const MongoStore = require('connect-mongo')(session);
这是我用来存储会话的代码,重用了一个名为 thisDb 的现有 Mongo 连接:
app.use(session({
secret: secretHash,
saveUninitialized: true,
resave: true,
secure: false,
store: new MongoStore({ db: thisDb })
}));
在成功登录期间:
var day = 60000*60*24;
req.session.expires = new Date(Date.now() + (30*day));
req.session.cookie.maxAge = (30*day);
在我的 Mongo shell 中,我可以验证登录时是否创建了一个新会话:
db.sessions.find()
{"cookie":{"originalMaxAge":2592000000,"expires":"2017-11-17T20:36:12.777Z","httpOnly":true,"path":"/"},"user":{"newNotifications":false,"username":"max","admin":"true","moderator":"true"},"expires":"2017-11-17T20:36:10.556Z"}
【问题讨论】:
-
什么时候重启你的服务器?你的意思是当你终止你的nodejs应用程序时?当你关闭服务器并再次运行它时,你能告诉我们你从
db.sessions.find()得到什么吗? -
@turmuka - 是的,当我终止/重新启动我的节点应用程序或对我的代码进行任何更改时,因为我使用的是 Nodemon,它会为我重新启动服务器。这里有两个
db.sessions.find()调用,第一个是在我登录时,第二个是在重新启动服务器后(让我退出): -
> db.sessions.find()[0] { "_id" : "ZFGZJL9yc2Z3D7eI-SI7pifnyvVbmSLl", "session" : "{\"cookie\":{\"originalMaxAge\":2592000000 ,\"expires\":\"2017-11-17T21:29:21.872Z\",\"httpOnly\":true,\"path\":\"/\"},\"user\":{ \"newNotifications\":false,\"username\":\"max\",\"admin\":\"true\",\"moderator\":\"true\"},\"expires\" :\"2017-11-17T21:29:21.845Z\"}", "expires" : ISODate("2017-11-17T21:29:21.872Z") }
-
> db.sessions.find()[0] { "_id" : "ZFGZJL9yc2Z3D7eI-SI7pifnyvVbmSLl", "session" : "{\"cookie\":{\"originalMaxAge\":2592000000 ,\"expires\":\"2017-11-17T21:29:21.872Z\",\"httpOnly\":true,\"path\":\"/\"},\"user\":{ \"newNotifications\":false,\"username\":\"max\",\"admin\":\"true\",\"moderator\":\"true\"},\"expires\" :\"2017-11-17T21:29:21.845Z\"}", "expires" : ISODate("2017-11-17T21:29:21.872Z") }
-
我真的不知道。也许您的服务器在退出时向您的客户端发送一条消息,表明它不再存在,并且您的浏览器删除了 cookie?也许您应该检查浏览器上的 cookie。还要尝试将这些额外信息放在您的问题中,而不是在这里。请下次编辑。
标签: node.js mongodb session express-session connect-mongo