问一个关于session过期的问题
首先来看看我定义sessin的地方,在server.js中 代码如下:
app.use(session({
cookie: {maxAge: 60000 * 20}, // 20 minutes
secret: "test",
store: new MongoStore({
db: "user"
}),
resave: true,
saveUninitialized: true,
}));
然后再 请求根目录的时候 设置了一个session:
app.get('/',function(req,res,next){
req.session.username="admin";
res.render('main.html');
});
我设置了20分钟的过期时间,可是结果不是我想要的。 看看输出日志
[2014-09-15 09:39:29.040] [INFO] dateFileLog - urlcontent_info
[2014-09-15 09:39:29.041] [INFO] dateFileLog - session{"cookie":{"originalMaxAge":1200000,"expires":"2014-09-15T01:59:06.506Z","httpOnly":true,"path":"/"},"username":"admin"}
[2014-09-15 09:41:08.380] [INFO] dateFileLog - urlset
[2014-09-15 09:41:08.380] [INFO] dateFileLog - session{"cookie":{"originalMaxAge":1200000,"expires":"2014-09-15T01:59:29.377Z","httpOnly":true,"path":"/"},"username":"admin"}
[2014-09-15 09:41:37.148] [INFO] dateFileLog - urlcontent_info
[2014-09-15 09:41:37.148] [INFO] dateFileLog - session{"cookie":{"originalMaxAge":1200000,"expires":"2014-09-15T02:01:30.278Z","httpOnly":true,"path":"/"},"username":"admin"}
为什么 expires 对应的时间 在每次请求的时候会改变呢?
7 回复
cookie expire 时间是当前时间+20分钟,resave: true 使每次请求都重写cookie。没有错误吧。
2014-09-15T01:59:06.506Z 要转成当地时间,进行比较。
@leapon 假如说 超过20分钟没有操作了,这个时候应该提示登录超时什么的,可是这个时候要怎么来提示呢?因为如果我再请求人和页面的时候 cookie都会重写的
@leapon 能贴一下你做 登录超时 处理的那一块代码吗?
@hc2014 我的理解是,session object过期后会从用户浏览器的session里消失,post的时候session object就不会被传到后台。 后台可以检测req.session里有没有要的session object。没有的话,就启动相应的session失效处理。
if (req.session.user) {
@leapon 我得叫你一声哥了,哥你还真只贴了一块代码啊? 不过谢啦,初步问题解决了,后续问题继续测试中…