我該怎麼做只有1可以在線爲1用戶在那個時間?想法?PHP/SESSION:每個用戶登錄一個?
所以你e.g不能登錄到用戶1在一臺PC /瀏覽器,然後在其他PC /瀏覽器登錄到用戶1?
我有我的PHP社區制,並在會話存儲..
我該怎麼做只有1可以在線爲1用戶在那個時間?想法?PHP/SESSION:每個用戶登錄一個?
所以你e.g不能登錄到用戶1在一臺PC /瀏覽器,然後在其他PC /瀏覽器登錄到用戶1?
我有我的PHP社區制,並在會話存儲..
你可以存儲在數據庫中的會話ID(最後訪問時間),並拒絕登錄嘗試與不同的會話ID的用戶,如果最後訪問時間太新(比方說,在過去的20分鐘內)。當然,請在註銷時清除ID。
請注意,如果用戶關閉瀏覽器而不註銷然後重新打開瀏覽器,他們可能會被鎖定一段時間(20分鐘以上,或者您決定的任何時間間隔),因爲它們不會有了匹配的會話cookie了。
無需使用會話。只需在數據庫users
表中創建一個列,以確定用戶是否已登錄。從那裏檢查。
該列可以命名爲LoggedIn
並且可以是enum ('Yes','No')
。此外,存儲上次登錄的時間在一些列LastLoggedIn
因此,當用戶想要登錄,首先檢查:
select 1 from users where ID = {$UserID} and `LoggedIn` = 'No'
如果返回的行,讓他/她的登錄。
如果有人忘記註銷:
運行一個cron作業或腳本,將其中通過檢查LastLoggedIn
時登錄超過幾個小時以上的用戶設定的時間段後復位LoggedIn
狀態。
我假設您將用戶保存在數據庫中,添加active_session
字段,在登錄時進行更新,並根據請求對其進行檢查,以確保當前用戶會話ID與存儲在數據庫中的最後一個用戶會話ID匹配。
在登錄:
UPDATE `users` SET `active_session`='$session_id';
當用戶進入到一個需要登錄的網頁,搜索該值:
SELECT * FROM users WHERE `active_session`='$session_id';
這樣,如果在其他地方的用戶登錄,前一交易日鍵會覆蓋,上面的SELECT返回一個空的結果集。
做到這一點,最好的辦法是在默認情況下創建已被設定爲0(假)您的用戶表一個額外的列和組記錄到1(真)時。然後,當用戶註銷重置爲0.每隔幾個小時運行一次檢查,要求用戶單擊「是」繼續進行會話,或者在倒數計時器達到零後自動註銷。 這裏的地板是,你離開它的時間越長,直到你運行檢查時間越長,用戶將不得不等待能夠再次登錄,如果他們離開你的網站,並直接返回而沒有正確註銷,因爲用戶表仍然會真正的,直到註銷。副作用是要求用戶輸入的次數更多,以免更長的時間訪問失敗。它需要被稱量,以免對用戶造成麻煩。 您可以檢測到用戶使用js離開了您的網站,然後退出,但用戶可以關閉此功能,因此不可靠。
我有種相同的任務,我只希望用戶只有一個會話。因此,只能使用賬戶的他/她,而不是其他人。
我設計它的方式是我有一個表,我存儲會話的開始和結束。這將用於用戶看最後一次訪問需要多長時間以及他/她最後一次在線。
然後我設計了一個會話表,我在更新時間/日期,每當用戶做什麼。 如果此處的時間超過30-60分鐘(尚未決定跨度),則會話值將被刪除。這樣用戶可以稍後再登錄,如果他決定這樣做的話。但不在30-60的時間範圍內。
會話表將由cron作業跟蹤。
我的想法是從這裏繼續第一個答案我已經看到:
您可以在會話ID(和上次訪問時間)存儲在數據庫中,並拒絕登錄嘗試與如果會話標識不同的用戶上次訪問時間太近(例如,在過去的20分鐘內)。當然,請在註銷時清除ID。
在數據庫中創建一個當前_session列,當用戶登錄保存表中的當前會話時,我們假設我們有一個登錄時間設置爲20分鐘,登錄後用戶關閉瀏覽器,並在接下來的10分鐘,所以在這裏我們有他的舊會話集有效20分鐘,但實際上最後一次他關閉瀏覽器,所以這次他將有一個新的會話ID,所以我們將捕獲這個會話不匹配,這裏將要求用戶通過刪除我們保留的舊記錄再次登錄。
適合任何未來可能需要此功能的人。
當用戶創建會話或登錄時,您可以獲取它生成的會話標識並將其存儲到該用戶帳戶下的數據庫列中。然後在應用程序的每個頁面上進行檢查,以查看當前會話ID是否與該用戶的數據庫中存儲的會話ID匹配。如果不是,請終止當前會話並將其重定向到登錄頁面。
這樣,會話ID將在他們用於登錄的每臺設備上有所不同。
如果用戶共享同一個cookie,那麼會發生什麼? – antoineg 2017-01-27 08:50:00
他希望確保用戶從不超過一臺PC登錄,即當用戶有新會話時使其他會話無效。 @Karem,糾正我,如果我弄錯了。 – aularon 2010-09-04 19:07:08
如果有人忘記註銷,他們可能會被永久鎖定。除非您跟蹤上次訪問時間,否則cron作業將會註銷仍處於活動狀態的用戶。 – cHao 2010-09-04 19:07:26
cHao只是我的想法..我不想那個.. – Karem 2010-09-04 19:11:29