express-session 如何设置sessionID的过期时间

小白

express官方“auth”这个登陆验证的例子中,会话期间登陆一次就行了。
但是关闭浏览器后,sessionID也会跟着消失,要怎么给这个sessionID设置过期时间呢?
以便下次打开浏览器,浏览时,不用再次登录。

主要是这个sessionID是自动生成的。(默认名是connect.sid)
(好像是,如果sessionID不存在的话,就自动生成一个,然后才能访问相对应的res.session.*)
在sessionID生成后,可以用req.cookies.sessionID获取,
但是设置就不行了:
res.cookie('sessionID', req.cookies.sessionID, { maxAge: 60000 });//无效

阅读 19.6k
3 个回答

服务器的session默认是放到内存来缓存的。重启服务,会导致 session 消失。
一般生产环境是 缓存进数据库的.
sessionID 是 服务器在 前端 设置 一个携带令牌的 cookie ,然后设置 该 cookie 的max-age,来控制sessionID的时效的。cookie过期,前端再次访问服务器就没有 令牌,也就是登录过期了。

app.use(session({
    secret: 'xxxx',
    name: 'xxxxID',   //这里的name值得是cookie的name,默认cookie的name是:connect.sid
    cookie: {
        // domain: 'xxx.xxx.xxx.xxx:xxxx', // 域名
        path: '路径' 
        httpOnly: true, // 开启后前端无法通过 JS 操作 
        maxAge: 1800000 // 这一条 是控制 sessionID 的过期时间的!!!
    },  //设置maxAge是80000ms,即80s后session和相应的cookie失效过期
    resave: false,
    saveUninitialized: true,
}))

访问接口后,你需要给session 设置 用户信息字段。一般都是 session.user = {字段信息}

最后建议你上 npm 搜索 session, 读一读人家的文档。上面介绍很详细了

刷新session的失效时间需要使用:
req.session._garbage = Date();
req.session.touch();

这样每次在请求后自动更新session失效时间

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题