CNode

【未解决】express-session 关闭浏览器后重新打开还是呈现登录状态

问答
Zzengj8发布于9 年前最后回复9 年前7 回复5223 浏览0 收藏
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)

2
272092461#1·9 年前

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

F
fancylife#2·9 年前

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

Z
zengj8#3·9 年前
引用 272092461cookie: {maxAge: 1000 60 60} 因为你配置了cookie的时长,所以浏览器会等到cookie过期,而不是关闭时清除

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

F
fancylife#5·9 年前

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

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

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

参与回复
登录后即可参与回复。登录