我是意大利人,我的英语不好,但我试着解释一下我想问你的意思:)
我想问你一个关于存储在服务器上的PHP和Sessions的问题。
我正在使用php和mysql进行聊天在线游戏。 我需要的是使用php检测过期会话是否不活动。
当用户登录游戏时,我会在数据库上更新表格。我更新的这一列是用户完成的最新操作的时间戳。然后,我为客户端X启动会话。如果此列为空,则表示用户已注销。
如果用户正确注销(游戏中的按钮),使用php我会破坏会话并使用空时间戳更新数据库列,因此用户结果正确注销,但如果有浏览器崩溃? 如何检测会话是否因浏览器崩溃而被破坏?
谢谢:)
答案 0 :(得分:0)
您可以将连接ID存储在单独的表中,运行一个循环,定期检查这些连接以查找客户端定期发送的表示活动的消息 如果时间差大于消息更新间隔一定的余量,则会丢弃连接和/或更新表
答案 1 :(得分:0)
你必须设置"超时",例如10分钟(600秒) 因此,对于用户的任何操作,您可以通过date_last_action和now()的差异来检查他当前是否处于活动状态。
例如。
登录:2014-03-27 15:49:00
最后一次行动:2014-03-27 15:51:00(距上次行动仅2分钟 [登录])
最后动作:2014-03-27 16:21:00(随着时间的推移,如此清除db记录, 删除他的会话)
$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
}
侨!