Laravel 4.2 - 当事件用户会话超时时,无法更新我的数据库

时间:2015-09-29 17:31:12

标签: php session laravel

我的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();
});

当我手动登录或注销时,一切都很完美,但是当我在会话结束时自动断开连接时,它不起作用。

如果您有任何想法,我将不胜感激

感谢。

2 个答案:

答案 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();