2013-04-18 58 views
-5

我正在使用php登錄腳本。 (我有一個愚蠢的初學者問題)計劃是1小時後用cookie註銷用戶。關閉後用戶仍在線

但是,如果用戶沒有按下注銷按鈕,用戶保持聯機狀態(在我的數據庫表上有記錄打開我的MySQL數據庫)當我刪除記錄一切正常,用戶可以登錄。

有人能幫我嗎? 我需要讓他的腳本刪除我的會議或其他東西嗎?

解決方案:問題是我只需要刪除(確保)用戶登錄數據在用戶想再次登錄之前被刪除。所以我做了一個小腳本,如果用戶想登錄,就會刪除一個打開的會話。畢竟我停止使用我自己的代碼。現在我正在使用CodeIgniter,它效果很好!

回答

2

確實,這是會話通常工作的方式。一旦加載頁面,瀏覽器和服務器之間就再也沒有連接。基本上,一旦一個頁面完成加載並剛剛坐在瀏覽器中,它就像用戶關閉窗口一樣。

無法100%可靠地檢測用戶是否仍在「在線」。你必須有一個Javascript發送一個不斷的心跳,但即使如此,它會下降到超時。如果您在某段時間沒有看到該用戶,則假定他已脫機並刪除該會話。這就是你所能做的。

+0

所以你的意思是由cronjob?還是有其他方法可以做到這一點? – RunnicFusion 2013-04-18 06:54:52

+0

有很多不同的方法,取決於你的情況。完全「被動」的方式是永遠不要刪除任何東西,只使用適當的查詢('SELECT ... WHERE last_seen> DATE_SUB(NOW(),INTERVAL 1 HOUR)')。其次,通過在隨機請求上運行一些垃圾回收*(例如'if(mt_rand(0,1000)== 1000)run_cleanup()',您可以執行「窮人的cron作業」。PHP的會話處理執行此操作。最後,你可以使用真正的cron作業,在一個真實世界的應用程序中,你通常會有這三個組合。 – deceze 2013-04-18 06:58:39

+0

@Roy你不需要*刪除記錄,你可以永遠保留它們(我不一定主張想法,只是指出來)我不知道爲什麼這會阻止你的用戶登錄,它不必如果它確實是你的具體問題 – deceze 2013-04-18 07:21:38