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
值。