Session 会话管理-多个可能过期和失效的会话?

Session 会话管理-多个可能过期和失效的会话?,session,cookies,Session,Cookies,我正在为我的一个附带项目设计一个会话管理系统,我正在努力找到一个简单的解决方案来满足以下要求: 要求: 一个用户可以有多个会话 一个用户的所有会话可以立即失效 用户的会话在30分钟后过期 我见过允许用户拥有多个自然过期的会话的方法(例如Redis和生成的密钥)。然而,由于会话的每个键都是随机生成的值,因此这种方法不能提供一种直接的方法来使属于用户的所有会话无效 我还见过一些方法,其中用户可以通过跟踪RDBMS表中为用户生成的会话ID来拥有多个会话。虽然这使得所有属于某个用户的会话都很容易失效,但

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

要求:

  • 一个用户可以有多个会话
  • 一个用户的所有会话可以立即失效
  • 用户的会话在30分钟后过期
  • 我见过允许用户拥有多个自然过期的会话的方法(例如Redis和生成的密钥)。然而,由于会话的每个键都是随机生成的值,因此这种方法不能提供一种直接的方法来使属于用户的所有会话无效

    我还见过一些方法,其中用户可以通过跟踪RDBMS表中为用户生成的会话ID来拥有多个会话。虽然这使得所有属于某个用户的会话都很容易失效,但我现在有一个额外的进程,必须失效/删除过期的会话,因为数据库(PostgreSQL、MySQL等)本身不能做到这一点


    是否有一种方法可以让我拥有全部3个功能?

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

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


    然后,您可以对整个散列应用一个TTL,以使所有密钥一次过期。这样就满足了您的所有需求

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

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


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

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