【未解决】express-session 关闭浏览器后重新打开还是呈现登录状态
发布于 6 年前 作者 zengj8 4179 次浏览 来自 问答
app.use(expressSession({
  resave: true,// 强制更新 session
  saveUninitialized: false,// 设置为 false,强制创建一个 session,即使用户未登录
  secret: 'session-cookie',
  // store: new MongoStore({// 将 session 存储到 mongodb
  //   url: 'mongodb://localhost:27017/session-cookie'// mongodb 地址
  // }),
  // cookie: {maxAge: 1000 * 60 * 60}
}));

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  if (req.session.user) {
    res.send('login');
  } else {
    res.send('no login');
  }
});

router.post('/login', function (req, res, next) {
  console.log(req.session);
  req.session.user = req.body.user;
  res.send(req.session.user);
});

module.exports = router;

关闭浏览器后重新打开还是呈现登录状态,是缓存的原因吗? 理论上 cookie 存放在浏览器内存中,关闭浏览器以后 cookie 就消失了

一开始的实验也验证了这个理论,重复多次后就出现相反的现象(关闭浏览器后重新打开还是呈现登录状态),是缓存吗?

7 回复

cookie: {maxAge: 1000 * 60 * 60} 因为你配置了cookie的时长,所以浏览器会等到cookie过期,而不是关闭时清除

重新打开浏览器,你的cookie依然有效,所以登陆状态还是存在,可以通过清空mongo数据库里面的session或者清理cookie,使登陆状态失效

@272092461 不是这样的,这个cookie指的是session的持续时间,和客户端的cookie没关系。我注释掉这行以后,情况还是没有改变

@fancylife 我没有用mongodb的时候,也是这种情况。

@zengj8 没有使用mongodb的时候,cookie对应的session持久化是通过内存变量完成的,你把服务进程杀掉,cookie也会失效

@fancylife 我的问题是cookie为什么还在,session自然没失效。这边的cookie是理论上应该是存在浏览器内存中的,关闭浏览器以后不就应该消失吗?

你可以了解一下你使用浏览器的cookie失效机制,是否和你猜测的一样

回到顶部