2012-11-17 68 views
1

我想創建一個頁面,我可以看到誰在我的網站上登錄。 對於登錄後的每個用戶,我創建一個會話,然後發送一個查詢,將mysql中的「記錄」行從「否」更改爲「是」。 然後,在頁面上我使用PHP來顯示每個人,他們在mysql中設置了Yes,並且它可以工作。 但是,我有一個問題,當有人關閉瀏覽器而沒有點擊註銷時發生 - 查詢不會執行,並且mysql中的值爲... 我能做些什麼來創建這樣的頁面?在PHP和Mysql中的會話

+0

的第一件事情應該問一個易懂的英語 – samayo

+0

你的問題請在下面看到我更新的答案。 – adamdunson

回答

2

而不是具有登錄或退出的布爾值,請確定該客戶的合理時間會話過期(例如1個月),然後將該時間量添加到時間戳並將其存儲在數據庫中,如session_expires或其他。然後,您可以檢查用戶的會話是否已過期,無論您何時進行登錄檢查。

此外,要手動過期會話(例如,如果用戶註銷),只需將session_expires字段設置爲過去的時間戳。

編輯

我沒有接觸過電腦在週末,所以我不能正確地更新我的答案。

如果您需要查看活動用戶,我過去所做的一件事就是使用一個last_seen時間戳字段,該字段在用戶在網站上執行任何操作時進行更新。然後,在您的「用戶登錄」頁面上,查詢近期的內容,如「最近15分鐘內上次看到的內容」。

+1

1個月可能不適合,因爲問題指出,他想知道有多少用戶登錄現在...那應該是至少15分鐘準確:) – MatthiasLaug

+1

好點,當讀完這個問題時完全錯過了那部分。嘿。 – adamdunson

1

你不能對此做任何事情,但定義一個超時。這意味着在登錄之後,您的初始呼叫會將您的客戶行設置爲「YES」,以便每次請求(或每分鐘騰出資源)觸發更新該客戶行中的日期列。如果不再有更新,則將該客戶定義爲「未登錄」,並將該列更新爲「否」

+0

我知道如何做超時,但你能告訴我怎麼做到這一點嗎? - 「如果不再有更新,則將該客戶定義爲」不再登錄「,並將該列更新爲」否「。 – user1630441

+1

像垃圾收集器:更新客戶設置loggedIn = 0其中MINUTE(TIMEDIFF(now(),lastAction)> 5 – MatthiasLaug

1

用戶一直保持登錄狀態的原因是PHP SESSION TIMEOUT可能在PHP設置php.ini中配置。

查看http://php.net/manual/en/function.session-set-save-handler.php瞭解如何設置會話關閉處理程序(一旦會話無效,將會調用它)。當關閉處理程序被調用時,在數據庫中將當前會話的「logged」設置爲false。儘管如此,它可能需要長達24分鐘(在會話超時時間爲 - session.gc_maxlifetime = 1440分鐘時,在php.ini中的默認值)。

將此值(session.gc_maxlifetime)減小爲2-3分鐘,並在您的每個頁面上都有一個保持會話活動的ajax函數。這肯定會增加你的服務器的負載,但你一定會更好地表示當前活動的用戶。您可以在代碼中將值從php.ini或採用ini_set(‘session.gc_maxlifetime’,30);

問候