我的laravel(4.2)应用程序目前存在问题。
我想在会话结束时(自动)用户离线时更新我的数据库。
所以我把终身会话分为1分钟进行测试。
我创建了一个事件文件:
<?php
Event::listen('auth.login', function($user)
{
$user->is_online = 1;
$user->save();
});
Event::listen('auth.logout', function($user)
{
$user->is_online = 0;
$user->save();
});
当我手动登录或注销时,一切都很完美,但是当我在会话结束时自动断开连接时,它不起作用。
如果您有任何想法,我将不胜感激
感谢。
答案 0 :(得分:2)
您必须通过将会话与当前时间进行比较来检测会话是否已结束。例如:
if ((time() - Session::activity()) > (Config::get('session.lifetime') * 60))
{
// Session expired
Event::fire('session.expired');
}
进入session.expired
事件并做任何你想做的事。
答案 1 :(得分:1)
您无法检测用户何时关闭浏览器或使用PHP导航您的网站
相反,您最好的选择是最有可能存储每个用户的上一个活动时间。
在“用户表”中沿“last_activity”行创建一列。 每当用户加载页面时,将其last_activity更新为当前时间。 要获取在线用户列表,只需查询数据库中last_activity值超过10分钟或20分钟的用户。
您可以使用此
设置会话时间$ _ SESSION ['time'] = time();