2009-12-27 275 views
6

如何檢查用戶是否已經登錄?檢查用戶是否已經登錄?

這樣,如果另一個瀏覽器中的用戶無法使用相同的帳戶登錄。

此外,這是一個很好的解決方案,或者我應該讓用戶在其他瀏覽器中登錄,然後註銷當前用戶並顯示一條消息(您從另一個位置登錄)就像使者一樣嗎?

回答

1

問題的前半部分與如何檢測多個用戶,但如何對待他們,我認爲還需要一些工作回答得很好。

首先,如果用戶正確登錄讓他們進入,不要阻止他們,如果他們登錄在其他地方。如果你真的不希望用戶有兩個打開的會話,那麼退出舊的會話,或者直接更新你保存的會話ID,這樣你可以跳出舊的連接。您可以通知您是否需要,但我只會通知您失效的會話。如果您發送消息登錄用戶,那麼當您僅處理用戶切換計算機的情況並且他們忘記退出舊會話時,就會變得煩人。

3

後產生簽下隨機令牌(或使用會話ID),而其存儲在數據庫中的用戶的cookie。在每次訪問頁面時,確保用戶令牌與數據庫條目匹配。如果兩者不匹配,請提醒用戶他們已在其他地方登錄。

您還可以存儲登錄時間,隨後將令牌被分配時間,並需要允許其他用戶用相同的ID登錄前30分鐘。

+0

將會話ID存儲在數據庫中甚至更好。 – TravisO 2009-12-27 05:42:07

+0

這也可以,TravisO :) – Sampson 2009-12-27 06:01:54

2

使用sessions是做到這一點的好辦法,用以控制驗證一種很常見的方法。

流量通常看起來是這樣的:

  • 用戶訪問網站,並session_start()被調用。爲該訪問者設置唯一的會話標識符(即Cookie)。
  • 用戶提交自己的登錄憑據登錄表單
  • 登錄憑據驗證,這一事實被存儲在會話數據與$_SESSION['logged_in'] = true,或者類似的
  • 對於用戶的時間在網站上的其他東西,你可以檢查$_SESSION['logged_in'],看看用戶是否已經登錄。

爲了控制用戶的登錄,你可以簡單地在一個數據庫中的字段(users表是罰款),表明當前有哪些會話ID(檢索與session_id())爲用戶,如果它不匹配的cookie值你的理由t收到,那麼你立即撥打該號碼session_destroy(),並認爲用戶已註銷。

使用$_SESSION意味着您不必擔心生成自己的令牌,並且可以爲您提供內置超全局值的功能,以便於存儲有關用戶身份驗證狀態的信息。

就個人而言,我會允許多個會話對於大多數網站用戶是積極的,因爲通常有沒有一個很好的理由不,但它顯然取決於網站的性質。但是,如上所述存儲當前活動會話標識是實現此目的的一種非常簡單的方法。

+0

還記得在登錄發生後生成一個新會話,如果您只在登錄表單的第一個頁面視圖上生成一個會話並且不重新生成,那麼有辦法利用該用戶。 – TravisO 2009-12-27 05:44:19

0

那麼所有上述解決方案將工作,但如果在每一頁上訪問你正在調用數據庫,並檢查會話令牌看天氣其分配給用戶同樣的道理..會殺了你的響應時間。我會建議的是在上述解決方案中使用緩存機制而不是數據庫。將會話令牌存儲到數據庫中會爲您的數據庫添加額外的字段,而實際上這不需要。使用開源高速緩存解決方案,如memcache。

0

你可以像userLoginStatus一個表像clockIn時間& CLOCKOUT時間, 領域和插入clockIn當前正值用戶進行登陸,在那個時候離開CLOCKOUT時間空白,應該只有當用戶做時鐘更新通過註銷按鈕, ,因此您可以檢查特定用戶的當前狀態,其中clockOut爲空,用戶應該登錄,因爲它僅在用戶註銷時更新。

相關問題