2016-01-10 140 views
1

我已閱讀this話題,因爲我想知道,如果它可以遠程關閉會話。我可能不完全理解這個話題,所以請讓我知道。PHP - 關閉會話

理想的情況下,如果有人登錄到我的應用程序,然後再次登錄使用不同的PC - 我想不使用數據庫來關閉其他會話。

我用這個:

session_start(); 
session_id($ns); 
session_destroy(); 
ob_start(); 
session_start(); 
session_regenerate_id(); 

,但實際上它並不破壞會議。我做錯了什麼嗎?

- 編輯

忘了補充一些細節。我只想聯繫數據庫一次 - 當用戶再次登錄時 - 當前的session_id將被添加到$ns變量中。

但我不想訪問每個頁面上的數據庫。在我登錄某人之前,我正在從DB讀取會話並試圖銷燬它並開始一個新的會話。

session_start()session_id($ns),仍然改變順序不能做到這一點

+0

php文檔說明了如何銷燬會話 –

+0

如果您試圖在另一臺計算機上銷燬會話,則不能在沒有聯繫數據庫的情況下執行該操作,因爲您不知道誰正在銷燬會話。 – Matt

+0

如果您登錄新的PC - 應創建一個新的會話。 –

回答

2

當指定的會話ID,session_id()前必須在session_start被稱爲()。

如果您想在登錄時登錄其他登錄會話的用戶,則需要進行進一步的工作,很可能涉及數據庫。否則,你無法知道哪個會話被破壞。

通常不需要在會話再次訪問之前實際銷燬會話,因此通過獲取會話ID的麻煩以至於您可以銷燬該會話是比所需更多的工作。但是如果你真的想這樣做,那麼你應該將用戶的會話ID存儲在數據庫中,並使用它來銷燬他們之前的會話。

一個更好的方法是將存儲某種(唯一的字符串,登錄時間,或東西)在會議上和,在每個頁面的訪問,然後可以驗證數據庫兩者的令牌。如果數據庫中的令牌與會話中的令牌不匹配,則會話是舊的/無效的,並且此時用戶可以註銷。

1

Store中的$ _ SERVER [「遠程主機」]在數據庫中的user表作爲用戶登錄。

然後每個用戶訪問你的應用時間比較當前主機。

如果它們不匹配破壞當前的會話,並要求用戶重新登錄。