【问题标题】:Shared http session lifetime共享 http 会话生命周期
【发布时间】:2021-10-08 10:12:10
【问题描述】:

我们有几个 Web 应用程序使用相同的身份提供程序(我们也管理),其中大多数(包括身份提供程序)都使用 .NET 核心。
要求是,如果用户同时登录两个或多个应用程序(在一个浏览器中),并且正在积极使用一个应用程序,它会自动延长 所有应用程序的会话生命周期。

因此,当他至少使用一个应用程序时,他并没有退出任何一个应用程序。这是另一个要求:在一段时间不活动后自动注销(这部分当然很容易)

我想过使用 Redis 服务器来管理这个共享会话的生命周期,使用每个应用程序将通过声明从身份服务器接收的 SessionId。因此,每次用户执行某些操作时,后端都会联系 Redis 并检查用户的会话是否仍然处于活动状态,如果是,则延长会话的生命周期。如果不是,请注销用户。

问题是,不允许应用程序直接访问这个 Redis 服务器(安全原因)。所以我想为这些应用程序添加一个单独的 Web 服务,以便使用标准 HTTP 端点进行联系。所以基本上只是 Redis 和 Web 应用程序之间的中间人。

有没有更好的方法呢?不确定这种要求有多普遍。

【问题讨论】:

    标签: session identity web-development-server


    【解决方案1】:

    Redis 通常属于分布式缓存,这意味着它位于另一个服务器场上。因此,您的应用程序受到限制,因为它不允许访问外部服务器。 如果您的应用程序正在开发中或仍处于增长阶段,我的建议是使用 InMemory 缓存 或考虑 response caching middleware。 此外,这些都是非常少量的数据,如果您只想将这些数据存储在缓存中作为开始,您肯定会考虑 InMemory

    当然,我了解您对 Redis 的需求,仅此而已:

    1. 在对多个服务器的请求之间保持一致(一致)。
    2. 在服务器重新启动和应用程序部署中幸存下来。那是因为 您的缓存通常位于不同的位置(例如 Azure)
    3. 不使用本地内存。
    4. 可扩展

    对于较大的应用程序考虑用 Distributed memory cache 替换 InMemory 缓存。它与 InMemory 缓存非常相似,因为 InMemory 和分布式缓存都位于运行应用程序的服务器场上。只有 InMemory 缓存需要粘性会话,而分布式内存缓存不需要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-21
      • 2016-11-21
      • 2014-08-03
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多