2012-10-28 45 views
0

我創建了登錄到我的網站。用戶登錄後,我將用戶ID和一個操作(=登錄)存儲在數據庫中,$ _SESSION ['loggedin'] == TRUE。 (如果註銷數據庫中的操作將退出會話將被銷燬) 如果有人想用第二臺計算機上的相同用戶名再次登錄,我將不會允許它,因爲數據庫中的最後一行是「登錄」的,而當然用戶ID也是一樣的。所以我不想允許來自一個用戶名的多個連接。 現在我要在這裏放置一個鏈接:「斷開其他連接」。從第二臺計算機刪除會話值

例如:我登錄在學校,但我忘了註銷,然後我試着在家裏登錄,但它會失敗,因爲我在(會話存活)另一個地方登錄,所以如果我點擊「斷開其它連接」鏈接我想在學校刪除會話值(改變DB的動作值是不夠的,因爲,如果我將其更改爲註銷會話仍然活着,並且多個連接將可用)

如何防止一個用戶名的多重連接?

回答

1

聽起來像是你需要做的是保存的東西來識別個人的連接,就像說一個數字,您通過每次一個上去了什麼賬戶登錄

例如,假設您使用ID爲1的用戶登錄,這是您第五次登錄,因此將其保存到數據庫: UserID = 1,State =「Logged In」 ,ConnectionID = 5 要保存的會話: $ _SESSION ['loggedin'] = TRUE和$ _SESSION ['Connection ID'] = 5

當您下次登錄時,檢查是否有該帳戶尚未註銷的連接,如果是這種情況,則更新現有行以將狀態設置爲已記錄或者如果你想記錄時間,創建一個新的登錄狀態(UserID = 1,State =「註銷」,ConnectionID = 5),當然你也可以爲你的新連接插入一行,連接6。

之後,您只需要在網站上運行代碼,可能每次加載頁面時都會檢查數據庫中是否存在具有與保存在$ _SESSION中相同的ConnectionID的任何行並且如果他們將某個操作設置爲已註銷,則如果是這種情況,則會銷燬將會記錄上一個連接的會話。

希望這會給你一個很好的想法,你可能會這樣做。我相信還有其他選擇。

如果您只關心一個賬戶只能從一個地方登錄,而您在登錄時沒有興趣記錄日誌,則只需將UserID和ConnectionID保存到數據庫,然後只需檢查數據庫中的ConnectionID與Session中的ConnectionID相同,如果不是,則會終止會話。

+0

宇,這麼久......我會做,並測試它,這需要更多的時間給我。但我每天只能處理一些小時,所以也許在2天后我會寫回 – Gery

+0

謝謝。有用 :) – Gery

0

唯一不太可靠的方法是檢查IP地址,當用戶在NAT網關後面時(例如蜂窩數據連接,家庭路由器等),這會失敗。你最好的選擇就是簡單地刪除任何現有的會話,如果用戶再次通過以前打開的會話進行登錄序列。沿着東西線

的login.php:

<? 

check_password_stuff(); 

if (user_is_already_logged_in()) { 
    delete_login(); 
} 
do_login_stuff();