如何在服务器重新启动时在节点js中维护持久性会话?

据我迄今为止从服务器重新启动后,使会话持久性的计算器的答案。

有4种可能的方式,我考虑用我的意思应用程序。

  1. cookie-Sessions https://www.npmjs.com/package/cookie-session
  2. 使用Jsonnetworking令牌(JWT) https://www.npmjs.com/package/jsonwebtoken
  3. 使用connect-mongo / connect-redis
  4. passport.js

现在我的疑问是,如果我将重新启动我的服务器在Mongo和Redis。 会话将仍然在那里,因为他们是外部数据存储。 但如何使我的会话持久使用JWT和cookie会话。 这些会话variables在哪里存储。

在passport.js的情况下,我遇到的解决scheme是使会话持久性是将会话数据存储在connect-mongo / connect-redis中。

有没有其他的方式在护照使会议持续?

如果您将会话存储在外部存储中,那么重新启动后应该可用。

护照不负责会议。 您可以独立于护照设置会话。 Passport是使用会话策略的身份validation中间件。 你安装快速会议:

app.use(express.session(session options)); 

之后你就可以启动和设置护照来使用会话:

 app.use(passport.initialize()); app.use(passport.session()); 

这意味着不pipe你是否使用护照,会话configuration都是一样的。

有几种方法可以使会话保持持久性:它们中的大多数将会话存储在数据库或文件系统中(内存存储仅适用于开发环境)。 请看这个npmsearch列表链接 。

官方快递页面兼容会话商店列表https://github.com/expressjs/session#compatible-session-stores

Jwt令牌,如果执行得当,是无状态的。 这意味着你的服务器不存储任何会话数据,它不知道有多less会话是有效的。 它授权请求,如果它有有效的jwt令牌。

Jwt令牌可以存储一些数据,比如你的用户ID。 当你的服务器接收到令牌时,它解码并validation,然后你可以访问这个令牌的数据。 请阅读这篇文章的更多细节:

https://stormpath.com/blog/jwt-the-right-way/

最重要的部分(有更重要的部分,但有时被忘记):

在您信任JWT中的任何信息之前,请始终validation签名

和:

不要在JWT中包含任何敏感数据

请看这个模块来维护jwt:

https://www.npmjs.com/package/json-web-token

甚至是一些混合解决scheme模块(使用jwt令牌的redis会话):

https://www.npmjs.com/package/jwt-redis-session