【问题标题】:Keep passport session alive during server restart在服务器重新启动期间保持通行证会话处于活动状态
【发布时间】:2014-06-12 05:06:04
【问题描述】:

有没有一种方法可以让我在服务器重启时保持用户会话,以帮助我保持良好和快速的开发?

我正在我的机器上本地处理 ExpressJS 节点项目。我正在使用Grunt-nodemon 来查看我的 JS 文件并在我进行更改后重新启动服务器。这意味着我项目上的任何会话(有用户登录)都被清除干净。

目前,如果我在某个深页面中并重新启动,我会被踢出登录页面并不得不重新导航,这真的很令人沮丧。

我使用护照作为会话中间件。我正在使用猫鼬作为我的主要应用程序数据存储,如果我能以某种方式使用它,那就太好了。

【问题讨论】:

  • 为您的会话使用一些其他存储,例如 redis,而不是默认的内存存储。但除非你对会话做一些非常花哨的事情,否则我会推荐使用基于 cookie 的会话。
  • 会话仍然是基于cookie的,只是在服务器重新启动后它们无效。 redis 不是数据库解决方案吗?
  • 你不能使用 MemoryStore,另外,确保你使用的 sessionSecret 在服务器重启之间没有改变(我有这个问题);如果 sessionSecret 发生变化,express 将无法从数据库/选择的 sessionStore 中恢复您的数据。

标签: javascript node.js express passport.js


【解决方案1】:

任何存储方式的简单使用都非常有可能。

一种选择是使用 Redis。

这是使用connect-redis 模块的示例:

    app.use(express.cookieParser());
    var session = require('express-session');
    var RedisStore = require('connect-redis')(session);
    app.use(express.session(
        {
            store: new RedisStore(
                {
                    host: '127.0.0.1',       //where redis store is
                    port: 6379,              //default redis port
                    prefix: 'sess',          //prefix for sessions name is store
                    pass: 'passwordtoredis'  //password to redis db
                }
            ),
            secret: 'cookiesecret',        //cookie secret
            key: 'express.sid'
        }

));

它可能更简洁,但它应该工作得很好。

设置 redis 非常简单; redis 网页上有一个很棒的教程:http://redis.io/topics/quickstart

请记住,redis 默认将会话存储在内存中,这意味着如果您重新启动硬件,会话将丢失(但有一个选项可以使其持久化http://redis.io/topics/persistence

希望这有帮助:)

【讨论】:

  • 感谢您的回答。所以你认为我可以使用我当前的 mongoose 设置来存储会话?
  • 是的。并且有用于此目的的实用程序(类似于 redis connect)可以做到这一点,因为:stackoverflow.com/questions/14059051/… 状态,connect-mongo 看起来是为此目的的最佳软件包。这是链接:github.com/kcbanner/connect-mongo。当然,您可以明确使用猫鼬并编写自己的商店:)。
  • 太棒了。我升级到 Express 4.x 并使用了 connect-mongo。完美运行,为我节省了很多时间。再次感谢,继续努力:)
猜你喜欢
  • 1970-01-01
  • 2012-06-05
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多