【问题标题】:Do sessions exist between NodeJS apps?NodeJS 应用程序之间是否存在会话?
【发布时间】:2016-07-30 20:19:55
【问题描述】:

我目前正在构建一个包含 2 个子域和主站点的平台,例如:

example.com
sub1.example.com
sub2.example.com

这 3 个应用程序在单独的端口上独立运行,并通过 nginx 路由。

假设sub1.example.com 控制身份验证等。这是登录发生并设置会话变量并生成 JWT 的地方。会话数据是否会从一个应用程序传输到另一个应用程序? sub2.example.com 能验证会话数据吗?

我该如何解决这个问题?

注意:这些应用程序最初位于一个应用程序中,但现在正在分开。会话当前使用 Redis 存储。

【问题讨论】:

    标签: node.js session nginx


    【解决方案1】:

    如果它们每个都是不同的服务器,运行一个单独的 node.js 进程,那么您需要某种方式在它们之间传递会话(或某种标识符)。
    一种方法是在您的请求中使用会话标头,它会告诉其他服务器您已经登录。

    【讨论】:

    • 使用一个标志表明您已登录没问题,但该应用使用 API 密钥和 JWT 跨资源进行身份验证。
    【解决方案2】:

    如果您没有将会话数据明确存储在集中式数据库或所有子域都可以访问的某种存储机制中,则不会将会话数据转移到另一个子域。

    由于您使用的是 JWT,如果每个子域在不同的服务器/进程上运行,则需要在每个子域上进行身份验证。您只需要维护相同的密钥。

    为了维护会话数据,简单的步骤是 - 如果用户请求来自任何子域:

    1. 使用 API 密钥和 JWT 对请求进行身份验证,如果这是第一次,则将令牌存储在 Redis 中

    2. 将会话数据与该令牌存储在持久数据库中

    现在,当另一个请求来自具有 JWT 令牌的同一用户时,进行身份验证并查看您的数据库,如果会话数据针对该令牌 ID 存在并使用它们。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      相关资源
      最近更新 更多