2010-09-21 71 views
0

我有一個網站具有登錄功能,我想要的是如果用戶從一臺計算機登錄到他的帳戶,然後再次登錄到他的同一帳戶同時從另一臺計算機他應該首先從他登錄的計算機上註銷。任何想法如何實現它都會很棒。PHP多次登錄

回答

1

假設您使用的是基於cookie的會話,最好的方法是跟蹤每個用戶的最後一個活動會話ID。這樣,當用戶從另一臺計算機上登錄時,最後一個活動會話ID得到更新,並且當他試圖在前一個會話中繼續時,您可以捕獲並結束舊會話。

+0

你會如何比較兩個會話?使用基於文件的會話無法訪問第二個會話的實際會話數據,因此無法比較哪個會話已更新。 – halfdan 2010-09-21 12:57:34

+0

「以及何時他試圖繼續上一次會話」但我想要的是,它不應該取決於用戶試圖繼續但異步如果用戶回到他登錄到第一個時刻的第一臺計算機那麼他應該有一個彈出窗口說他再次登錄他。請讓我知道,如果我是有道理的。 – pcraft 2010-09-21 13:08:04

+0

從功能上講,這是一回事。只要用戶無法再訪問它,無論您的舊會話是否仍然逗留(直到它超時),都不是真正相關的。如果用戶未向服務器發送請求,則無法從用戶的計算機上刪除cookie。 – tdammers 2010-09-21 13:09:45

2

您需要將會話存儲在數據庫中。在那裏你可以有一個包含會話(session_id,用戶名,session_data)的表。 session_id和session_data是自我解釋的。您使用「用戶名」字段來存儲登錄用戶的名稱。如果用戶從另一臺計算機再次登錄,則可以輕鬆地查詢該表並刪除重複的會話。

在網絡上有很多數據庫支持的會話處理的PHP實現可用。

+0

所以這意味着我應該運行後臺進程來查看數據庫值是否已更改,或者是否有任何其他方式通知第一臺計算機應該查詢數據庫以查看第一臺計算機的會話是否應該破壞了? – pcraft 2010-09-21 12:59:08

+0

感謝您的幫助。 – pcraft 2010-09-21 13:00:24

+0

您的登錄邏輯會檢查會話表中是否已有條目。如果你只是刪除條目。如果用戶移回他的第一臺計算機,會話將失效。 – halfdan 2010-09-21 13:00:52