Nodejs express3.x的session模块,如何支持不同用户,设定不同的过期时间?
Nodejs express3.x的session模块,如何支持不同用户,设定不同的过期时间?
express 3.x的session,我是这样用的。
//Cookie 解析的中间件 app.use(express.cookieParser(config.cookieSecret)); //提供会话支持 //secret 用来防止篡改 cookie //key 的值为 cookie 的名字 app.use(express.session({ secret : config.cookieSecret, key : config.cookieSecret, cookie: {maxAge: 1000 x 60 x 60 x 24 x 14},//14天 store: new MongoStore({ host: config.host, db: config.dbName }) }));
现在的问题是,不同的用户,如何设定不同的过期时间?因为用户登录的页面,有个选项“记住我30天”
要在Express 3.x中使用Session模块为不同用户设置不同的过期时间,可以通过自定义存储后端来实现。具体来说,你可以覆盖默认的Session存储机制,并根据用户的偏好设置不同的过期时间。
以下是一个简单的示例代码,展示了如何实现这一功能:
const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const app = express();
// Cookie解析中间件
app.use(express.cookieParser(config.cookieSecret));
// 自定义存储后端,用于处理不同的过期时间
let sessionStore = new MongoStore({
host: config.host,
db: config.dbName
});
// 使用express-session中间件,但不直接设置过期时间
app.use(session({
secret: config.cookieSecret,
key: config.cookieSecret,
store: sessionStore,
resave: false,
saveUninitialized: true
}));
app.post('/login', (req, res) => {
const user = req.body.user;
const rememberMe = req.body.rememberMe; // 假设表单中有“记住我”选项
if (rememberMe) {
// 如果用户选择了“记住我”,设置较长的过期时间
req.session.cookie.maxAge = 1000 * 60 * 60 * 24 * 30; // 30天
} else {
// 否则,设置较短的过期时间
req.session.cookie.maxAge = 1000 * 60 * 60 * 24 * 14; // 14天
}
// 登录逻辑...
res.send('Login successful');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释:
- 中间件配置:首先,我们配置了Cookie解析中间件和Session中间件。
- 自定义存储后端:我们创建了一个MongoDB存储后端实例。
- 登录路由:在登录路由中,我们根据用户是否选择了“记住我”选项来动态设置
req.session.cookie.maxAge
。如果用户选择了“记住我”,我们将设置一个较长的过期时间(例如30天);否则,设置一个较短的过期时间(例如14天)。 - 保存会话:通过修改
req.session.cookie.maxAge
属性,我们可以为每个用户设置不同的过期时间。
这种方法允许你在登录时根据用户的偏好动态地调整Session的过期时间,而无需修改全局配置。
可以单独设置 sid 在 Cookie 中的有效期,还有 sid 在 Mongodb 中的有效期
要在Express 3.x中使用express-session
模块为不同的用户提供不同的会话过期时间,你可以根据用户的特定选择(如“记住我30天”)动态设置maxAge
。下面是一个示例代码来展示如何实现这一点:
首先,确保你的应用中已经安装了express
和express-session
模块。
var express = require('express');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var app = express();
app.use(express.cookieParser(config.cookieSecret));
app.use(session({
secret: config.cookieSecret,
key: config.cookieSecret,
store: new MongoStore({
host: config.host,
db: config.dbName
}),
// 初始默认的会话过期时间
cookie: {maxAge: 1000 * 60 * 60 * 24 * 14} // 默认14天
}));
app.post('/login', function(req, res) {
var rememberMe = req.body.rememberMe; // 假设通过表单提交
// 登录逻辑...
// 根据rememberMe的值设置不同的过期时间
if (rememberMe) {
req.session.cookie.maxAge = 1000 * 60 * 60 * 24 * 30; // 记住我30天
} else {
req.session.cookie.maxAge = 1000 * 60 * 60 * 24 * 14; // 默认14天
}
res.send('Login successful');
});
在这个例子中,我们定义了一个登录路由/login
。当用户登录时,我们检查他们是否选择了“记住我”选项。如果选择了,我们将req.session.cookie.maxAge
设置为30天;如果没有选择,则保持默认的14天。
这种方法允许你灵活地为每个用户设置不同的会话过期时间。