问一个关于session过期的问题
发布于 10 年前 作者 hc2014 6774 次浏览 最后一次编辑是 8 年前 来自 问答

首先来看看我定义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失效处理。

@hc2014

if (req.session.user) {

@leapon 我得叫你一声哥了,哥你还真只贴了一块代码啊? 不过谢啦,初步问题解决了,后续问题继续测试中…

回到顶部