Nodejs session 过期时间问题

Nodejs session 过期时间问题

app.use(express.session({secret:‘poynt’, store: sessionStore, cookie:{maxAge:30000}}));

这样是30秒过期吗?

为啥不过期呢?

把30000 设置成30也过期 如何设置过期时间呢?

7 回复

当然可以。根据你提供的标题和内容,我们可以详细探讨一下 Node.js 中的 Session 过期时间问题,并提供相应的示例代码。

问题分析

首先,让我们理解一下 cookie.maxAge 的含义。cookie.maxAge 是指在客户端存储的 Cookie 的有效期(以毫秒为单位)。如果你将 maxAge 设置为 30000,那么它的值表示的是 30 秒(因为 1000 毫秒 = 1 秒)。

示例代码

假设你使用的是 express-session 包来处理 Session。以下是如何设置 Session 过期时间的示例:

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

const app = express();

// 配置 Session 中间件
app.use(session({
    secret: 'poynt',
    resave: false,
    saveUninitialized: true,
    cookie: {
        maxAge: 30000 // 设置 Session Cookie 的有效期为 30 秒
    },
    store: new session.MemoryStore() // 可以选择其他类型的存储
}));

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

问题解答

  1. 关于 30000 是否等于 30 秒

    • 是的,30000 毫秒确实等于 30 秒。
  2. Session 不过期的原因

    • 如果 Session 不过期,可能是因为你在客户端或服务器端没有正确地处理 Session 或者没有正确配置中间件。例如,确保你的浏览器允许存储 Cookie,或者检查是否有其他中间件干扰了 Session 处理。
  3. 如何设置过期时间

    • 如上所示,通过设置 cookie.maxAge 属性即可。如果需要更复杂的逻辑,比如动态设置 Session 过期时间,可以在应用逻辑中动态调整 maxAge 值。

希望这些信息能帮助你解决 Node.js 中的 Session 过期时间问题。如果有进一步的问题,请随时提问!


最好写在 res.writeHead(200, { 'Set-Cookie’ 类似于这样的格式 Set-Cookie: =[; =]   [; expires=][; domain=]   [; path=][; secure][; HttpOnly]

不知道你说的是不是这个意思

现在可以过期了。。。把maxAge:200000就行了。。。说白了就是设置大点。。奇怪了。。。

好像必须大于1min的样子

在Node.js中使用express-session中间件时,可以通过配置cookie.maxAge来设置session的过期时间。maxAge是以毫秒为单位的,所以如果你希望设置一个30秒的过期时间,应该将maxAge设置为30000(即30秒 * 1000毫秒/秒)。

以下是一个示例配置:

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

const app = express();

app.use(session({
    secret: 'poynt',
    store: sessionStore,
    cookie: {
        maxAge: 30000 // 30秒后过期
    }
}));

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'));

在这个例子中,每次访问根路径/时,会增加session中的views计数器,并显示当前的访问次数。如果30秒内没有再次访问,那么session将会过期。

如果你将maxAge设置为30000后仍然发现session不过期,可能是因为其他原因导致session没有正确地被销毁或重新创建。确保你的应用没有错误,同时检查是否正确清除了浏览器缓存或者尝试在无痕模式下打开浏览器测试。

如果你只是希望以秒为单位设置过期时间,可以简单地将maxAge的值除以1000,但为了保持一致性和清晰度,通常建议直接使用毫秒作为单位。

回到顶部