NodeJS 重置cookie会话到期时间

xu3bshqb  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(140)

我尝试根据从数据库中提取的值动态设置cookie-session的到期时间。对于某些用户,该值可能小于或大于其他用户。
当服务器初始化时,我是这样设置我的cookie会话的:

server.use(require('cookie-session')({
  name: 'session',
  secret: keys.session.secret,
  maxAge: 1 * 10 * 60 * 1000,
}));

我想根据不活动情况重置cookie,因此此代码根据活动情况将到期日期重置为maxAge值。

server.use(async (req, res, next) => {
  try {
    // Reset inactivity
    // Update a value in the cookie so that the set-cookie will be sent.
    // Only changes every minute so that it's not sent with every request.
    req.session.nowInMinutes = Math.floor(Date.now() / 60e3); // 
     ....

因此,根据网上的一些研究,我看到我应该能够重置到期的值,这样做:

// 30 seconds is just a test. I will pull the expiry value from the database based // on 
// user ID but for now if a login is detected change the expiry date to 30 seconds
// 
 if (req.user) {
  // Reset max age of cookie to 30 seconds
  res.cookie('cookieName', 'value', { maxAge: 30 * 1000 });
}

这似乎不起作用。浏览器中的会话值在当前时间后10分钟仍显示:

如何动态设置用户cookie的过期值理想情况下只设置一次。

nx7onnlm

nx7onnlm1#

您可以通过req.sessionOptions更改特定请求的maxAge选项
表示当前请求的会话选项。这些选项是在中间件构造时提供的内容的浅克隆,可以根据每个请求更改cookie设置行为。
例如

const cookieSession = require('cookie-session');
const express = require('express');
const fs = require('fs');
const path = require('path');

const app = express();

app.use(
  cookieSession({
    name: 'session',
    secret: 'test',
    maxAge: 1 * 10 * 60 * 1000,
  }),
);

app.use(function (req, res, next) {
  req.session.nowInMinutes = Math.floor(Date.now() / 60e3);
  next();
});

app.get('/', function (req, res) {
  fs.createReadStream(path.resolve(__dirname, 'index.html')).pipe(res);
});
app.get('/user/:id', function (req, res) {
  req.sessionOptions.maxAge = 30 * 1000;
  res.sendStatus(200);
});

app.listen(3000, () => console.log('listening on port 3000'));

首先访问http://localhost:3000,然后访问http://localhost:3000/user/1,以检查Expires / Max-Age的更改

相关问题