如何配置express-session仅在访问/login路由时下发session cookie
解决方案
核心配置调整
你遇到这个问题的核心原因是saveUninitialized配置为true,该参数会强制将未被修改的新session直接持久化并下发cookie,所以用户第一次访问任意路由就会触发cookie下发,有效期从此时开始计算。
仅需要做核心配置调整即可满足需求:
- 将session配置中的
saveUninitialized改为false,此时只有当你主动修改session内容时(也就是登录接口中给session赋值的操作),服务端才会下发session cookie,有效期从登录时间开始计算,刚好为10分钟 - 可选配置:如果需要用户活跃时自动续期session有效期,可以额外添加
rolling: true配置,每次用户发起有效请求时都会自动刷新cookie的过期时间
修改后完整代码示例
// all imports here const express = require('express') const session = require('express-session') const app = express() app.use(session({ secret: 'secret', name: 'session', saveUninitialized: false, // 核心修改:未修改的session不保存、不下发cookie secure: false, resave: false, // rolling: true, 可选配置,开启后用户活跃时自动续期有效期 cookie:{ httpOnly: true, maxAge: 10*60*1000 } })) app.get('/',(req,res)=>{ console.log(req.session); res.sendFile(__dirname+"/index.html"); }) app.get('/login',(req,res)=>{ req.session.loggedIn=true; req.session.user="Gratis"; res.send("successful"); }) app.get('/homepage',(req,res)=>{ if(!req.session.loggedIn) res.redirect('/'); else{console.log(req.session); res.send(" Hello ");} }) app.listen(3000);
验证逻辑
配置调整后,用户访问/路由时,服务端会创建临时session对象但不会持久化,也不会下发cookie,此时不会触发有效期计时。只有用户调用/login接口修改session内容后,服务端才会正式存储session,并下发有效期为10分钟的cookie,完全不需要手动操作cookie,保留了express-session的全部封装能力。
内容的提问来源于stack exchange,提问作者Gratis Devs
相关产品推荐
相关产品推荐

