在快速会话中过期不起作用

expire in express-session doesn't work

我正在寻找使会话过期的方法。这是我的计划 我想生成 RSA public/private 密钥取决于用户访问我的网站时的会话。当他们刚到达我的网站时,我发送 public 密钥,当他们尝试登录时,他们使用 public 密钥来加密他们的 ID/PW,服务器用私钥解密它。我需要在用户登录后让每个会话过期,或者离开网站以节省服务器内存。所以我决定为任何会话设置超时。无论他们登录与否,每个会话都将以这种方式删除。

我发现我可以使用 'expires' 属性使会话在特定时间后被删除,但它不起作用。

这是我的代码

var RedisStore = require('connect-redis')(session);
var redis = require("redis").createClient();
app.use(session({
    store: new RedisStore({host: 'localhost', port:6379, client:redis, 
resave:false}),
    secret: 'keyboard cat',
    expires : '1000'
}));


app.get('/logincheck', function(req, res){

  console.log('session check : ' + req.session.redSession);
  if(req.session.redSession){
    res.json({
      result : 'on'
    });
  }
  else {
    res.json({
      result : 'off'
    });
  }
});


app.post('/login', function(req, res) {
req.session.redSession = req.body.id;
console.log('session check : ' + req.session.redSession);

if (req.body.id == 'fuck' && req.body.password == 'you') {
    res.json({
        message: 'ㅊㅋ'
    });
    //sess.id = req.body.id;
    return;
} else {
    res.json({
        message: 'fuck you'
    });
    return;
}
});

我登录了,等待一秒钟以上并发送 /logincheck,但我收到了 'on'。正如我所料,会话应该在一秒钟内过期并且它会自行销毁,因此 req.session.redSession 中不应包含任何内容,因此它必须 return 'off'。但它保持 return 'on' 和 console.log('session check:') 在服务器端保持 returns 字符串(不是未定义的)。

我哪里想错了?如何让会话在一秒后消失?

expirescookie 选项的 属性(不是 "direct" 选项),您应该使用 maxAge 而不是 expires:

app.use(session({
    store  : new RedisStore({host: 'localhost', port:6379, client:redis, 
resave:false}),
    secret : 'keyboard cat',
    cookie : {
      maxAge : 1000
    }
}));

根据您的设置,您可能还需要设置其他选项(因此 consult the manual)。