gpt4 book ai didi

session - Redis作为session store,使一个用户的所有session失效

转载 作者:IT王子 更新时间:2023-10-29 05:59:42 26 4
gpt4 key购买 nike

我正在使用 redis 作为 session 存储,

像这样存储 session

[NameSpace]:[UniqueId] -> [email_id]

问题来了

当用户重置密码时,如何使该用户的所有 session 无效?

这是我想出的解决方案

将电子邮件 ID 存储为 UID 的一部分

像这样存储 session

[NameSpace]:[UniqueId]-[email_id] -> [email_id]

然后我可以使用SCAN MATCH在用户重置密码时删除所有 key 。

维护一个 UID 列表

像这样存储 session 之后

[NameSpace]:[UniqueId] -> [email_id]

维护一个单独的列表

[NameSpace2]:[email_id] -> [ "[UniqueId]", "[UniqueId]" ]

并使用列表使 session 无效。 (我可以使用redis命名空间pubsub来维护上面列表的有效性)

我的问题是

  1. 在 Redis 中进行批量 session 失效的推荐方法是什么?
  2. 在 cookie 中存储像 [UniqueId]-[email_id] 这样的 session ID 是否存在任何安全问题?

PS:我知道有一个类似的问题,但我觉得它很嘈杂并且面向 express.js 而不是通用的 redis 和用户 session 。(Invalidating all of a single user's sessions in express.js)

最佳答案

维护一组所有用户 session

[NameSpace]:[email_id] -> {}

每个 session 标识符都是集合中的一个值。如果您想存储 session 属性,请使用映射 sessionIdentifier1 -> sessionProperties1(查找和删除成本相同)

[NameSpace]:[email_id] -> {sessionIdentifier1 , sessionIdentifier2}

批量 session 失效 - Delete[NameSpace]:[email_id]。成本 O(1)。

正在查找 sessionIdentifier - SISMEMBER[NameSpace]:[email_id]sessionIdentifier1。成本 O(1)。

Are there any security issues with storing the session-id like [UniqueId]-[email_id] in the cookie ?

这取决于。如果 cookie 不是 HttpOnly,它将允许恶意 JS 通过 XSS 漏洞读取该 cookie。您可能会让自己容易受到网络钓鱼攻击。您可以改用用户的内部 UUID

关于session - Redis作为session store,使一个用户的所有session失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com