req.session.cookie.maxAge
和 app.use(session({ cookie: { maxAge: ... } }))
中的 maxAge
都用于设置会话的有效时间,但它们的作用范围和使用场景有所不同。以下是它们的区别:
1. req.session.cookie.maxAge
-
作用范围:仅针对当前会话(
req.session
)的cookie
设置。 -
使用场景:在代码中动态地为某个特定的会话设置过期时间。
-
特点:
-
可以在请求处理过程中动态修改。
-
只影响当前请求的会话。
-
优先级高于全局的
cookie.maxAge
设置。
-
示例:
req.session.cookie.maxAge = 60000 * 5; // 设置当前会话的 cookie 过期时间为 5 分钟
2. app.use(session({ cookie: { maxAge: ... } }))
-
作用范围:全局设置,适用于所有会话。
-
使用场景:在初始化会话中间件时,为所有会话设置默认的
cookie
过期时间。 -
特点:
-
是全局配置,影响所有会话。
-
不能在请求处理过程中动态修改。
-
-
如果未在代码中动态设置
req.session.cookie.maxAge
,则使用此值。app.use( session({ secret: "shaodongliang", resave: false, saveUninitialized: true, cookie: { secure: false, maxAge: 1000 * 60 * 3 }, // 全局设置 cookie 过期时间为 3 分钟 }) );
3. 区别总结
特性 | req.session.cookie.maxAge | app.use(session({ cookie: { maxAge: ... } })) |
---|---|---|
作用范围 | 仅针对当前会话 | 全局,适用于所有会话 |
使用场景 | 动态修改某个会话的过期时间 | 初始化会话中间件时设置默认的过期时间 |
优先级 | 优先级更高(会覆盖全局设置) | 优先级较低(如果未动态设置,则使用此值) |
是否可动态修改 | 是 | 否 |
示例 | req.session.cookie.maxAge = 60000 * 5; | cookie: { maxAge: 1000 * 60 * 3 } |
4. 实际应用场景
-
全局默认值:
-
如果你希望所有会话的默认过期时间都是 3 分钟,可以在
app.use(session(...))
中设置cookie: { maxAge: 1000 * 60 * 3 }
。
-
-
动态调整:
-
如果某些特定请求需要更短或更长的过期时间,可以在处理请求时动态设置
req.session.cookie.maxAge
。
-
示例:
app.use(
session({
secret: "shaodongliang",
resave: false,
saveUninitialized: true,
cookie: { secure: false, maxAge: 1000 * 60 * 3 }, // 全局默认 3 分钟
})
);
app.post("/login", (req, res) => {
// 动态设置当前会话的 cookie 过期时间为 5 分钟
req.session.cookie.maxAge = 60000 * 5;
res.send("登录成功,会话过期时间已设置为 5 分钟");
});
5. 注意事项
-
优先级:
-
如果同时设置了全局
cookie.maxAge
和动态req.session.cookie.maxAge
,动态设置的优先级更高。
-
-
过期时间单位:
-
maxAge
的单位是毫秒(ms),注意换算时间。
-
-
会话存储:
-
maxAge
仅控制客户端cookie
的过期时间,会话数据在服务器端的存储时间可能由会话存储引擎(如MemoryStore
、Redis
等)的配置决定。
-
通过合理使用这两种设置,可以灵活地控制会话的过期时间,既满足全局需求,又能应对特定场景的动态调整。