2014-03-27 68 views
0

我是意大利人,我不擅長英語,但我試着解釋我想問你:)Php會話在聊天,瀏覽器崩潰

我想問你一個關於PHP和Sessions存儲在服務器上的問題。

我正在使用php和mysql聊天在線遊戲。 我需要的是檢測,使用PHP,過期的會話不活動。

當用戶登錄遊戲時,我更新了數據庫上的表格。我更新的這一列是用戶完成的最新操作的時間戳。然後,我爲客戶端X開始會話。如果此列爲空,則表示用戶已註銷。

如果用戶正確地註銷(遊戲中的一個按鈕),用php我銷燬會話,我用空的時間戳更新數據庫的列,所以用戶結果正確註銷,但如果有瀏覽器崩潰了? 如何檢測瀏覽器崩潰導致會話被破壞?

謝謝:)

+0

如果它不同於上次更新? –

+0

這意味着用戶正在做一些事情(如去另一個聊天室,閱讀私人信息等)... – user2854276

回答

0

,你可以連接ID存儲在一個單獨的表,運行一個循環,定期檢查郵件的連接的客戶端會定期發送表示活動 如果時間差比大消息更新間隔一定的限制,您將丟失連接和/或更新表格

0

您必須設置「超時」,例如10分鐘(600秒) 因此,對於您檢查的任何用戶操作如果他目前由date_last_action和now()的差異激活。

例如。

登錄:2014年3月27日15:49:00

一個動作:2014年3月27日15點51分00秒(僅2從最後一次操作分鐘 [登錄])

一個動作:2014年3月27日十六時21分00秒(超過時間,因此清除數據庫記錄, 刪除其會話)

$date_now = time(); 
$date= DATA VALUE OF LAST CURRENT USER ACTION; 
$date1 = time(); 
$date2 = mktime($hh,$ii,$ss,$mm,$gg,$aaaa); 

$dateDiff = $date1 - $date2; 
$fullDays = floor($dateDiff/(60*60*24)); 
$fullHours = floor(($dateDiff-($fullDays*60*60*24))/(60*60)); 
$fullMinutes = floor(($dateDiff-($fullDays*60*60*24)-($fullHours*60*60))/60); 

$deadline_in_minutes=10; 

if($fullMinutes>$deadline_in_minutes) 
    { 
     //do logout clear session 
    } 

的Ciao!

+0

意大利語,意大利語中的rispondevi mike facevi un favore:D Comunque ... fondamentalmente potrei anche farlo,pero io ho messo che di default,se un utente sta parcheggiato nel gioco per piu di mezzora,viene sloggato e viene buttato fuori dal gioco,quindi a me servirebbe un meccanismo che riconosce se unutenteècrashato dal gioco,in modo da fare l'更新sulla tabella e schiaffarlo離線..非so se mi sono spiegato:D Grazie :) – user2854276