【问题标题】:Laravel 4.2 Help NeededLaravel 4.2 需要帮助
【发布时间】:2017-01-31 21:30:44
【问题描述】:

我的 HomeController.php 中有这段代码,它位于公共函数 home() 块中

//Fetch Users Online
$online = DB::table('users')->where('online','1')->get(); 

//Get All Users Online Count
$num_online = DB::table('users')->where('online','1')->count();

//Get All ADMIN Online Count
$admin_online = DB::table('users')->where('online','1')->where('group_id','4')->count();

//Get All MODS Online Count
$mod_online = DB::table('users')->where('online','1')->where('group_id','6')->count();

//Get All VIP Online Count
$vip_online = DB::table('users')->where('online','1')->where('group_id','8')->count();

//Get All UPLOADER Online Count
$uploader_online = DB::table('users')->where('online','1')->where('group_id','7')->count();

//Get All MEMBERS Online Count
$member_online = DB::table('users')->where('online','1')->where('group_id','3')->count();

在 home.blade.php 中转发

<div class="col-md-10 col-sm-10 col-md-offset-1">
<div class="clearfix visible-sm-block"></div>
<div class="panel panel-default">
<div class="panel-heading"><h4>Online Users <span class="badge">{{ $num_online }}</span></h4></div>
<div class="panel-body">
@foreach($online as $o)
<span class="badge-user group-member">
{{ $o->username }}
</span>
@endforeach
</div>
<div class="panel-footer">
<div class="row">
<div class="col-sm-12">
<span class="badge-user group-member">Member ({{ $member_online }})</span> <span class="badge-user group-uploader">Uploader ({{ $uploader_online }})</span> <span class="badge-user group-vip">VIP ({{ $vip_online }})</span> <span class="badge-user group-staff">Mod ({{ $mod_online }})</span> <span class="badge-user group-su">Admin ({{ $admin_online }})</span>
</div>
</div>
</div>
</div>
</div>
<!-- /Online Users -->

我的问题在我的数据库中的用户表中,我有一个名为 online 的在线列。 0 离线,1 在线。如果手动将用户在线状态从 0 更新为 1,那么他们应该会显示在上面显示的 ONLINE 块中。但是我怎样才能自动化呢?如果用户登录,则设置为 1,如果用户注销,则设置为 0。

任何帮助将不胜感激.....

我正在运行 laravel 4.2 并猜测这在 5.4 中会更容易完成 我害怕升级,甚至不想自己尝试。

【问题讨论】:

  • 您会遇到不退出的用户的问题。要么为此使用 websockets,要么每次用户在网站上做某事时更新记录以存储他们的最后一次活动日期,如果他们在过去 5-10 分钟内做过某事,则将其视为“在线”。

标签: laravel laravel-4.2


【解决方案1】:

您可以通过创建和监听事件来实现。

Event::listen('auth.login', function($user)
{
    $user->online = 1;

    $user->save();
});

Event::listen('auth.logout', function($user)
{
    $user->online = 0;

    $user->save();
});

详情请关注laravel documentation

【讨论】:

    【解决方案2】:

    您可以查看用户会话,当您使用数据库驱动程序进行会话时,会有一个名为last_activity 的列,如果用户在 15 分钟内没有做任何事情,您就知道它处于离线状态。

    您不能依赖用户是否退出。不是每个人每次都这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-25
      • 2018-04-06
      • 2017-08-05
      • 1970-01-01
      • 2021-02-02
      • 2021-10-31
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多