使特定用户的所有会话失效?

时间:2013-10-18 05:34:01

标签: session web-applications clojure ring

让特定用户的所有会话到期的好方法是什么?我想保留用户 - >会话的单独地图,但我不确定如何在会话cookie到期时更新地图。

1 个答案:

答案 0 :(得分:1)

假设你在内存中使用原子或类似的东西(我不认为是生产方式的东西)你可以这样做:

将会话存储在具有自己属性的地图中:

sessions = {
  s1 -> {...}
  s2 -> {...}
  s3 -> {...}
  ...
}

将用户会话存储在单独的集合映射中:

user-sessions = {
 user1 -> #{s1 s2 s3}
 user2 -> #{s4 s5 s6}
}

您需要解决以下需要更新集合的操作:

  • 将新会话:s添加到:user

    (assoc user-sessions:user(conj(:user user-sessions):s))

  • 从以下位置删除会话:用户

    (assoc user-sessions:user(disj(:user user-sessions):s))