2016-09-16 80 views
1

我設計一個會話管理系統對我的一個側面項目,我發現有一個簡單的解決方案,以下列要求摔跤:會話管理 - 可以過期並失效的多個會話?

要求:

  1. 一個用戶可以有多個會話
  2. 用戶的所有會話可以一次無效
  3. 會話的用戶30分鐘
後過期0

我見過允許用戶有多個會話自然過期的方法(例如Redis和生成的密鑰)。但是,由於會話的每個密鑰都是隨機生成的值,因此此方法不提供直接的方法來使屬於用戶的所有會話無效。

我也看到了一種方法,用戶可以通過跟蹤RDBMS表中用戶的生成會話ID來獲得多個會話。雖然這很容易使屬於用戶的所有會話無效,但現在我有一個額外的過程,必須使過期的會話無效/刪除,因爲數據庫(PostgreSQL,MySQL等)不會自行完成此操作。

有沒有一種方法,我可以擁有所有3?

+0

請問爲什麼你想要多個會議而不是一個會議,甚至根本沒有會議? –

+0

我想允許多個設備,瀏覽器等能夠使用相同的憑據進行身份驗證,但被視爲獨立會話。 「沒有會議」確實引出了一些有趣的想法。感謝您的想法! – gordysc

+0

從Web服務器的角度來看,會話是一個會話,這意味着不應該有任何先驗,這會阻止您的服務器爲同一用戶進行移動和桌面會話。 –

回答

0

據我的理解,您可以使用redis本身提出解決方案。您可以爲所有需要的會話設置Redis Hash,而不是爲每個會話分配一個密鑰。

基本上,散列的鍵將是您在客戶端生成的唯一會話ID,並且值將是您想要在每個會話中維護的任何類型的數據(您可以將JSON另存爲字符串) 。

然後,您可以在整個散列上應用TTL,以一次過期所有密鑰。因此,滿足你所有的要求

+0

完美,謝謝! – gordysc