我擁有爲我的web應用程序實現的一流的基於登錄的PHPSESSID機制。困擾我的一個方面是用戶在瀏覽器A中孤立他的會話(在計算機A上),在瀏覽器B中(在計算機B上)打開另一個瀏覽器,孤立它以回到瀏覽器A等等。可能所有這些都在PHPSESSID cookie有效的(合理冗長的)時間範圍內。如果兩個會話都顯示用戶靜態數據,並且用戶正在操作這些數據,那麼這兩個瀏覽器不一定會顯示與數據庫中數據一致的數據。如何管理跨瀏覽器的PHP會話
我對這種情況的首選迴應是第二次登錄兩次使第一次無效。我可以在數據庫中保留一個與userID關聯的PHPSESSID。這很簡單。現在最困難的部分是:在第二次登錄時,我如何使寫入數據庫的PHPSESSID失效,從而使第一次會話(現在失效的PHPSESSID)的後續訪問失敗?
(因爲要殺死第二PHPSESSID,一個我其實想保持我不能使用session_destroy()。我不能完全相同的理由使用setcookie()函數。)
我有一個想法涉及數據庫訪問序列號。每個新請求都會返回前一個加號。如果順序不正確,session_destroy()當前查詢者。我所看到的稍有不便之處在於,它需要額外的數據庫提取才能在每個用戶訪問之前恢復序列號。
是否有任何方法將此序列號與服務器緩存內某個用戶ID相關聯,該用戶ID不涉及任何cookie傳輸?
謝謝。
我並不完全同意這首先是一個問題。如果用戶暫時處於非活動狀態,是不是一直有數據在服務器端發生變化的可能性?爲什麼要剝奪用戶使用他想要的任何瀏覽器的自由?用戶界面不應該更新問題嗎? – 2010-08-31 07:48:54
不可以。數據不會自動改變。今天的家庭有這麼多電腦。用戶可以在他的桌面上打開一個會話,並在他的筆記本電腦上放置另一個會話。如果一個人不知道另一個,他們都會顯示垃圾。 (這是Ajax,我不刷新屏幕,會話只是向數據庫通知更新,應用程序的推測是它隨時知道數據庫的狀態,因爲它驅動所有更新,在登錄時記錄。) – Ollie2893 2010-08-31 07:54:57