小编典典

Node.js-会话不会通过res.redirect()持续存在

redis

我(几乎)成功地将Node.js与Express和Redis结合使用来处理会话。

我遇到的问题是使用时不保留会话res.redirect()

这是我的看到方式:

req.session.username = username.toString();
console.log(req.session);
res.redirect('/home');

console.log()打印:

{ lastAccess: 1322579131762,
  cookie:
   { path: '/',
     httpOnly: true,
     _expires: Tue, 29 Nov 2011 15:06:31 GMT,
     originalMaxAge: 60000 },
  username: 'admin' }

现在,这是以下代码:

app.get('/home', [app.requireLogin], function(req, res, next) {
// Not showing the rest as it's not even getting there
// Instead, here is what's interesting
app.requireLogin = function(req, res, next) {
  console.log(req.session);

这个console.log()打印出:

{ lastAccess: 1322579131775,
  cookie:
   { path: '/',
     httpOnly: true,
     _expires: Tue, 29 Nov 2011 15:06:31 GMT,
     originalMaxAge: 60000 } }

显然,“用户名”对象已消失。该会话没有保留它,而是重新构建了一个新会话。

我该如何解决?如果您需要任何信息,请不要犹豫。

这是我设置会话管理的代码:

app.configure(function() {
  // Defines the view folder and engine used.
  this.set('views', path.join(__dirname, 'views'));
  this.set('view engine', 'ejs');

  // Allow parsing form data
  this.use(express.bodyParser());

  // Allow parsing cookies from request headers
  this.use(express.cookieParser());
  // Session management
  this.use(express.session({
    // Private crypting key
    secret: 'keyboard cat',
    store: new RedisStore,
    cookie: {
      maxAge: 60000
    }
  }));
  this.use(app.router);
});

这是基于gist的整个项目(我的意思是,部分内容):https
:
//gist.github.com/c8ed0f2cc858942c4c3b(忽略渲染视图的属性)


阅读 375

收藏
2020-06-20

共1个答案

小编典典

好吧,我找到了解决方案。问题在于,该时间maxAge已添加到当前日期。因此,在浏览器端,cookie被设置为在所示的GMT时间过期。

问题如下:我使用虚拟机测试node.js,并且,您知道…有时会挂起计算机。

好吧,发生的事情是机器的时间晚了两天。因此,无论何时在服务器端设置cookie,客户端都认为cookie已经过期,因为我的主机没有迟到两天。

另一个愚蠢的结果。

2020-06-20