Nodejs中session.cookie.maxAge如何设置
Nodejs中session.cookie.maxAge如何设置
session() middleware req.session.cookie.maxAge = any number; 关闭浏览器,会话丢失!正常情况不应该会话丢失,何解?
Node.js 中 session.cookie.maxAge 如何设置
在 Node.js 中使用 express-session 这样的中间件来管理会话时,session.cookie.maxAge 属性用于设置会话cookie的过期时间。如果将 maxAge 设置为某个值(例如几小时或几天),那么即使用户关闭了浏览器,只要在这段时间内重新打开浏览器并访问应用,会话信息依然会被保留。
然而,如果你发现关闭浏览器后会话丢失,可能是因为你没有正确设置 maxAge 或者你的应用配置中存在其他问题。下面是一个简单的例子,演示如何正确设置 maxAge:
const express = require('express');
const session = require('express-session');
const app = express();
// 配置 session 中间件
app.use(session({
secret: 'your_secret_key', // 用于加密session ID的密钥
resave: false, // 即使没有修改也强制保存session
saveUninitialized: true, // 强制创建未初始化的会话
cookie: {
maxAge: 24 * 60 * 60 * 1000 // 设置 cookie 的最大存活时间为 24 小时
}
}));
// 示例路由
app.get('/', (req, res) => {
req.session.views = (req.session.views || 0) + 1;
res.send(`You have viewed this page ${req.session.views} times.`);
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在这个例子中,我们首先导入了 express 和 express-session 模块,并创建了一个 Express 应用实例。接着我们通过 app.use() 方法来配置 session 中间件,其中 cookie.maxAge 被设置为 24 小时(即 24 * 60 * 60 * 1000 毫秒)。
这样设置后,即使用户关闭浏览器,只要在接下来的 24 小时内再次访问该网站,他们之前存储的会话数据(如页面浏览次数)仍然会被保留。
注意事项
- 确保
secret是一个安全的字符串,用来加密和保护会话数据。 resave和saveUninitialized的设置根据你的需求调整,它们会影响会话的保存行为。- 如果你希望会话在关闭浏览器后立即失效,可以将
maxAge设置为null或者不设置它,这时会话将依赖于cookie.expires,默认情况下它会在当前会话结束后失效。
关闭浏览器是会让session丢失的,所以要写cookie,通过cookie 重新生成session。
我看session的文档意思是说session.cookie.maxAge会自动用到重写cookie的maxAge上的。但是我看了下cookie依旧是默认值,没被修改。
在Node.js中使用express-session中间件时,可以通过设置maxAge来控制Session Cookie的有效期。如果你希望在关闭浏览器后仍然保持会话不丢失,需要将maxAge设置为一个较大的值或者设置为null(表示会话Cookie)。
以下是如何设置maxAge的一个示例:
示例代码
首先,确保已经安装了express-session:
npm install express express-session
然后,在你的应用中配置express-session:
const express = require('express');
const session = require('express-session');
const app = express();
app.use(session({
secret: 'your-secret-key', // 用于加密的密钥
resave: false, // 即使没有修改也重新保存会话
saveUninitialized: true, // 不初始化就保存会话
cookie: {
maxAge: 24 * 60 * 60 * 1000, // 设置会话有效期为24小时
secure: false // 如果是https,可以设置为true
}
}));
// 示例路由
app.get('/', (req, res) => {
req.session.views = (req.session.views || 0) + 1;
res.send(`You visited this page ${req.session.views} times`);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在这个例子中,maxAge被设置为24小时(24 * 60 * 60 * 1000毫秒),这意味着在用户关闭浏览器后的24小时内,会话信息会被存储在客户端的Cookie中。如果希望关闭浏览器后会话依然有效,你可以将maxAge设为更大的值,或者直接将cookie对象中的maxAge设置为null(这表示会话Cookie,通常与httpOnly一起使用以提高安全性)。
请注意,maxAge仅在客户端设置,服务器端的req.session.cookie.maxAge属性可以用来读取当前会话的maxAge值。

