【问题标题】:Express 4 Sessions not persisting when restarting server重新启动服务器时 Express 4 会话不持久
【发布时间】:2014-06-09 06:04:15
【问题描述】:

我有一个 Express 4 应用设置来进行会话。

// Sessions
app.use(cookieParser());
app.use(session({ secret: "some-secret" }));

// Signup
app.post("/signup", function (req, res) {
    create_user(req.body.user, function (err, user_id) {
        req.session.user_id = user_id;
        res.redirect("/admin");
    });
});

当我提交表单时,它会将 user_id 保存到 req.session。但是,当我重新启动服务器时,会话就消失了。

为什么它不持久?我是否缺少一些配置?

【问题讨论】:

    标签: node.js session express session-cookies


    【解决方案1】:

    @mscdex 答案很好,但如果您正在寻找代码示例。这是一个带有 connect-mongo 的工具,如果您使用 mongodb 和 mongoose,它应该可以正常工作。

    安装包:

    npm i connect-mongo
    

    需要这个包:

    const session = require('express-session'); // You must have express-sessions installed
    const MongoStore = require('connect-mongo')(session)
    

    现在配置会话:

    app.use(
      session({
        secret: "mysecrets",
        resave: false,
        saveUninitialized: false,
        store: new MongoStore({ 
          mongooseConnection: mongoose.connection,
          ttl: 14 * 24 * 60 * 60
         }),
    
      })
    );
    

    再次假设您使用的是猫鼬并配置了连接。

    如果你做的一切都正确,它应该可以正常工作。

    【讨论】:

      【解决方案2】:

      express-session 的默认会话存储是 MemoryStore,顾名思义,它仅将会话存储在内存中。如果您需要持久性,Express 有很多可用的会话存储。一些例子:

      如需更新且更完整的列表,请访问Compatible Session Stores

      【讨论】:

      • Cookie-session 似乎可以用作 express-session 的替代品,而对于其余部分,它们将与 express-session 一起使用。上面的理解有多正确?
      猜你喜欢
      • 2016-01-08
      • 1970-01-01
      • 2015-01-31
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多