【问题标题】:Session Management - Multiple Sessions That Can Expire And Invalidated?会话管理 - 可以过期和失效的多个会话?
【发布时间】:2017-01-24 03:32:55
【问题描述】:

我正在为我的一个副项目设计一个会话管理系统,并且我正在努力寻找一个简单的解决方案来满足以下要求:

要求:

  1. 一个用户可以有多个会话
  2. 用户的所有会话可以一次失效
  3. 用户的会话将在 30 分钟后过期

我已经看到允许用户拥有多个自然过期的会话的方法(例如 Redis 和生成的密钥)。但是,这种方法并没有提供一种直接的方法来使属于用户的所有会话无效,因为会话的每个键都是随机生成的值。

我还看到了通过在 RDBMS 表中跟踪为用户生成的会话 ID 来让用户拥有多个会话的方法。虽然这可以很容易地使属于用户的所有会话无效,但我现在有一个额外的过程必须使过期的会话无效/删除,因为数据库(PostgreSQL、MySQL 等)不会自行执行此操作。

有没有一种方法可以让我同时拥有这三个?

【问题讨论】:

  • 请问您为什么要多个会话而不是单个会话,甚至根本不需要会话?
  • 我希望允许多个设备、浏览器等能够使用相同的凭据进行身份验证,但被视为独立会话。不过,“根本没有会话”确实带来了一些有趣的想法。感谢您的想法!
  • 从您的 Web 服务器的角度来看,会话就是会话,这意味着不应该有任何先验因素会阻止您的服务器为同一用户进行移动和桌面会话。
  • 正确,但假设浏览器注销。 Web 服务器如何知道是否使该会话无效?也许移动设备仍在使用它?
  • 所以您希望多台设备共享同一个会话?

标签: session cookies


【解决方案1】:

据我从您的问题中了解到,我可以使用 redis 本身提出一个解决方案。您可以Redis Hash 为您想要的所有会话而不是为每个会话设置一个单独的密钥。

基本上,散列的键是您在客户端生成的唯一会话 ID,值是您希望在每个会话中维护的任何类型的数据(您可以将 JSON 保存为字符串)。

然后您可以对整个散列应用 TTL 以一次性使所有密钥过期。从而满足您的所有要求

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多