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天”


3 回复

要在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');
});

解释:

  1. 中间件配置:首先,我们配置了Cookie解析中间件和Session中间件。
  2. 自定义存储后端:我们创建了一个MongoDB存储后端实例。
  3. 登录路由:在登录路由中,我们根据用户是否选择了“记住我”选项来动态设置req.session.cookie.maxAge。如果用户选择了“记住我”,我们将设置一个较长的过期时间(例如30天);否则,设置一个较短的过期时间(例如14天)。
  4. 保存会话:通过修改req.session.cookie.maxAge属性,我们可以为每个用户设置不同的过期时间。

这种方法允许你在登录时根据用户的偏好动态地调整Session的过期时间,而无需修改全局配置。


可以单独设置 sid 在 Cookie 中的有效期,还有 sid 在 Mongodb 中的有效期

要在Express 3.x中使用express-session模块为不同的用户提供不同的会话过期时间,你可以根据用户的特定选择(如“记住我30天”)动态设置maxAge。下面是一个示例代码来展示如何实现这一点:

首先,确保你的应用中已经安装了expressexpress-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天。

这种方法允许你灵活地为每个用户设置不同的会话过期时间。

回到顶部