2013-03-26 88 views
-1

我的腳本中實現了一個php登錄系統。如果數據庫中存在一個會話,我將如何創建一個拒絕用戶登錄的腳本?如果會話存在於數據庫中,拒絕登錄

例如,

用戶1登錄到系統>登錄接受 用戶2名登錄到系統相同的帳戶作爲用戶1>拒絕,因爲另一個會話存在。

這就是我希望它工作的方式。

謝謝。

+2

好。你堅持哪部分? – 2013-03-26 07:45:30

+0

你,嗯,檢查數據庫的一個現有的會議,並且,呃,否認登錄,如果有被發現? – deceze 2013-03-26 07:51:08

+0

如果有另一個會話,我可以使用哪些代碼將用戶重定向到另一個頁面? – 2013-03-26 07:52:25

回答

0

好問題。

如果你指的PHP會話:您可以在會話ID(和上次訪問時間)存儲在數據庫中,並拒絕與不同的會話ID用戶的登錄嘗試,如果最後訪問時間過近(比如在過去的20分鐘內)。當然,請在註銷時清除ID。

請注意,如果用戶關閉瀏覽器而不註銷然後重新打開瀏覽器,他們可能會被鎖定一段時間(20分鐘以上,或者您決定的任何時間間隔),因爲它們不會有了匹配的會話cookie了。

如果你指的DB會話:您必須配置Setting Account Resource Limits在你的MySQL數據庫就像這個link。但是這裏的問題是,一個帳戶同時連接到服務器的數量只能在MySQL 5.0.3以上。

如果您指的是REAL-TIME cheking,那麼您可以使用COMET Programming將數據推送到瀏覽器,而無需瀏覽器明確請求它。

+0

當有人登錄時記錄會話。如果用戶不活動,cron腳本將每5分鐘清除一次會話。我需要CODE來阻止它們。 – 2013-03-26 08:03:27

+0

檢查我的編輯。謝謝 – 2013-03-26 08:07:43

+0

當下一個用戶登錄時說20分鐘,那麼來自另一臺具有唯一IP地址的用戶將被通知。像在Facebook中。 – 2013-03-26 08:09:05

0

用戶表中應該有一個名爲logged_in的新字段。在進行身份驗證時,請檢查此字段具有的值。

如果它是0/false,讓用戶登錄並將logged_in字段設置爲1/true。

否則,如果LOGGED_IN場是1 /真不要讓第二個用戶登錄。

不要忘記設置LOGGED_IN場0 /假註銷時。

+1

如果用戶只需關閉瀏覽器,該怎麼辦?沒有點擊註銷。 – 2013-03-26 08:00:13

+0

我沒有想到這個謝謝。這裏可能會觸發某種懲罰系統。如果用戶在沒有註銷的情況下關閉了窗口,我們可以通過js/ajax檢查這個窗口,下一次他將不得不等待(例如)6個小時,並將字段更新爲0/false。或者第二位用戶必須等到會話過期。 – zkanoca 2013-03-26 08:07:05

+0

我打算將會話存儲在數據庫中,並使用cron作業每5分鐘清除一次非用戶會話。 – 2013-03-26 08:14:21

1

店你在你的數據庫的sessionId,然後拒絕不同會話ID用戶的登錄嘗試,如果最後訪問時間是最近(通過尋找到當前時間的最後登錄時間之間的差來計算)上登出

.clear ID
0

對於你要存儲在數據庫session值是

。然後當其他用戶登錄具有相同的細節。你可以從數據庫檢查它已經有一個用戶在線登錄相同的詳細信息

0

我會把另一個字段放入數據庫稱爲,例如,last_seen。每次登錄用戶產生請求 - 只需將當前日期放入該字段即可。

當有人嘗試登錄時 - 只需檢查用戶在現場看到多久。如果超過會話超時時間(默認20分鐘) - 您可能會認爲用戶已註銷並允許登錄。

否則 - 拒絕登錄。

你不能確定用戶是否仍在使用你的網站或沒有。當用戶登錄/註銷時,您可以在某個字段中輸入1/0,但沒有人能保證該用戶在關閉標籤之前單擊註銷鏈接。

但是,當用戶點擊註銷鏈接時,您可以通過將該新字段設置爲空來改善您的網站的行爲。否則,可能會發生某人已註銷,現在又試圖再次登錄,但無法這樣做,因爲系統仍在使用他的帳戶。

+0

開始,當有人登錄時記錄會話。如果用戶不活動,cron腳本將每5分鐘清除一次會話。我需要CODE來阻止它們。 – 2013-03-26 08:02:31

+0

你的會話存儲在數據庫中,對嗎?如果是這樣,你可以在那裏添加另一列,保持用戶會話的id屬於。而不僅僅是檢查是否有與剛剛嘗試登錄的用戶ID會話。 – 2013-03-26 08:14:05

+0

我知道所有這一切;我只需要寫出拒絕用戶的php代碼。 – 2013-03-26 08:20:14