【问题标题】:Expiration object in express-session not the correct type?快速会话中的过期对象不是正确的类型?
【发布时间】:2016-08-05 01:46:42
【问题描述】:

我的 nodejs 应用程序(使用 express v4.12.2 和 express-session v1.13.0 模块)经常会抛出以下 TypeError 异常并崩溃:

/app/node_modules/express-session/node_modules/cookie/index.js:136
  if (opt.expires) pairs.push('Expires=' + opt.expires.toUTCString());
                                                       ^

TypeError: opt.expires.toUTCString is not a function
    at Object.serialize (/app/node_modules/express-session/node_modules/cookie/index.js:136:56)
    at setcookie (/app/node_modules/express-session/index.js:576:21)
    at ServerResponse.<anonymous> (/app/node_modules/express-session/index.js:204:7)
    at ServerResponse.writeHead (/app/node_modules/on-headers/index.js:46:16)
    at ServerResponse._implicitHeader (_http_server.js:157:8)
    at ServerResponse.res.write (/app/node_modules/compression/index.js:82:14)
    at ReadStream.ondata (_stream_readable.js:529:20)
    at emitOne (events.js:90:13)
    at ReadStream.emit (events.js:182:7)
    at readableAddChunk (_stream_readable.js:147:16)
    at ReadStream.Readable.push (_stream_readable.js:111:10)
    at onread (fs.js:1822:12)
    at FSReqWrap.wrapper [as oncomplete] (fs.js:614:17)

我不知道为什么这是一个错误,因为toUTCString() 是一个函数。 (除非opt.expires 不是Date 对象。)

从测试应用程序开始,也因为这似乎涉及opt.expires,我想知道当会话超时时是否会发生这种情况。

这是我设置会话的方式:

var express = require('express');
var expressSession = require('express-session');
...
var app = express();
...
app.use(expressSession({
    key: 'application.sid',
    secret: 'some.secret.string',
    cookie: {
        maxAge: 60 * 60 * 1000,
        expires: 60 * 60 * 1000
    },
    store: new mongoStore({
        mongooseConnection: mongoose.connection,
        collection: 'sessions'
    }),
    saveUninitialized: true,
    rolling: true,
    resave: true,
    secure: true
}));

如果用户继续使用应用程序,我的目标是延长会话到期时间。

我的设置方式是否有问题,或者我遇到了一些可以通过特定模块版本组合修复的错误?

【问题讨论】:

    标签: node.js session express express-session


    【解决方案1】:

    req.session.cookie.expires 必须是日期而不是数字。

    每个会话都有一个独特的 cookie 对象。这允许您更改每个访问者的会话 cookie:

    var hour = 3600000;
    req.session.cookie.expires = new Date(Date.now() + hour);
    req.session.cookie.maxAge = hour;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2019-10-13
      • 2021-10-22
      • 2021-12-28
      相关资源
      最近更新 更多