Nodejs 请问express里面 session的生命周期怎么设置?

Nodejs 请问express里面 session的生命周期怎么设置?

请问express里面 session的生命周期怎么设置? 是 app.use(express.session({ cookie: {path: ‘/’, httpOnly: ‘false’, maxAge:10000} //毫秒 })); 这么来么? 这样做以后是在10000毫秒以后删除了session,但是关闭浏览器以后再进去session却还在,session不是关闭浏览器就回清空么?

5 回复

当然可以。在Express应用中,express-session中间件用于管理Session。要设置Session的生命周期,主要是通过配置express-session中间件来实现。你提到的maxAge属性确实会影响Session的生命周期,但maxAge只是控制Cookie的有效期,并不直接控制Session数据的存储时间。

默认情况下,Session数据是存储在内存中的,这意味着即使用户关闭了浏览器,内存中的Session数据仍然存在。为了实现关闭浏览器后自动清除Session的效果,你可以将Session存储在客户端(如使用cookie),或者使用一些持久化存储方式(如数据库或文件系统)并在用户关闭浏览器时清除这些数据。

下面是一个示例,展示如何使用express-session中间件设置Session的生命周期:

const express = require('express');
const session = require('express-session');

const app = express();

// 使用express-session中间件
app.use(session({
    secret: 'your_secret_key', // 用于加密Session ID的密钥
    resave: false,             // 强制未初始化的会话保存到存储
    saveUninitialized: true,   // 即使没有会话数据也保存会话
    cookie: {
        path: '/',              // Cookie路径
        httpOnly: true,         // 禁止JavaScript访问Cookie
        maxAge: 10000           // Cookie有效期,单位为毫秒
    }
}));

// 示例路由
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 running on port 3000'));

在这个示例中,我们设置了cookie.maxAge为10000毫秒(即10秒)。这意味着Cookie将在10秒后过期。然而,这并不意味着Session数据会被立即从服务器端删除,除非你显式地调用req.session.destroy()方法。

如果你希望在用户关闭浏览器后立即清除Session数据,可以考虑使用一些持久化存储方式(如数据库或文件系统),并结合前端逻辑(如使用localStoragesessionStorage)来实现。


求救啊啊啊啊

不对的,你的session可能存在数据库里面,然后那个cookie保存了你的session的ID,cookie的有效期跟你session设置的是一样的。

session的存储策略是撒?

在Express中使用express-session中间件时,可以通过配置cookie选项来设置session的生命周期。默认情况下,session不会因为关闭浏览器而自动清除。如果需要在关闭浏览器后清除session,可以将cookie.maxAge设置为0或不设置,并通过客户端逻辑(如JavaScript)来实现。

示例代码

const express = require('express');
const session = require('express-session');

const app = express();

app.use(session({
    secret: 'your_secret_key',
    resave: false,
    saveUninitialized: true,
    cookie: {
        path: '/',
        httpOnly: false,
        maxAge: 10000 // 设置会话过期时间为10秒
    }
}));

// 为了让session在关闭浏览器后失效,可以设置maxAge为0
app.use(session({
    secret: 'your_secret_key',
    resave: false,
    saveUninitialized: true,
    cookie: {
        path: '/',
        httpOnly: false,
        maxAge: null // 关闭浏览器后会话失效
    }
}));

app.get('/', (req, res) => {
    if (req.session.views) {
        req.session.views++;
        res.setHeader('Content-Type', 'text/html');
        res.write(`<p>Views: ${req.session.views}</p>`);
        res.end();
    } else {
        req.session.views = 1;
        res.end('Welcome to the session demo. Refresh!');
    }
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  • maxAge: 设置session过期时间(以毫秒为单位)。设置为null或不设置表示session会在浏览器关闭后自动失效。
  • httpOnly: 默认为true,表示该Cookie不能通过JavaScript访问。这里设为false允许JavaScript访问。
  • secret: 用于签名session ID cookie,确保安全性。
  • resave: 控制是否应该在每次请求时重新保存session,默认为false
  • saveUninitialized: 控制是否应该保存未初始化的session,默认为true

如果希望session在关闭浏览器后失效,可以将maxAge设置为null或不设置,这样每次浏览器重启时session都会被清除。

回到顶部