如何检查所有用户以查看他们是否在Laravel 4中联机?

时间:2014-11-24 15:37:02

标签: php laravel laravel-4 blade

我的目标是检查用户表中的所有用户,看看他们是否在线使用Laravel 4。 我也对谁没有登录感兴趣。 后来,我想打印出2个单独的在线列表和谁不在线列表?

  • 是否快速显示出来?
  • 我是否使用了Laravel附带的Auth::check()
  • 我是否需要更新database上的任何内容?

示例

Sample Image

3 个答案:

答案 0 :(得分:4)

无法知道用户是否仍在您的网站上。你只能用一些方法来猜测它们是不是。

最常用的方法是保存用户上次访问某个页面的时间戳。如果您说用户在一页上停留一分钟,则可以说如果上一个时间戳与当前时间戳之间的时间不到一分钟,则该用户在线。

Facebook使用一种ping函数来检查这一点。他们每隔x秒向服务器发送一次ajax请求。这样他们就知道用户仍然在网站上。

答案 1 :(得分:1)

我想向你推荐一些逻辑。

  • 是的,您需要更新数据库。您的用户表。 我建议在一个名为:is_online,tinyInt,0或1的列中。

完成后,

  • 登录功能中,在重定向之前的某个位置。

    set is_online = '1'; //现在应将其保存到您的数据库中。

  • 在您的注销功能中应用相同的类似逻辑,在重定向之前的某个位置。

    set is_online = '0';
    

别忘了保存!!通过在更新数据库中的任何信息时执行$user->save();

打印列表 你可以做到

For all the user()->is_online = '1' OR user()->is_online = '0'
// Do any programming logic with it, print it or whatever ... 

试一试!如果你卡住了,发布了一些代码,我会帮你完成它。

答案 2 :(得分:0)

我最近有同样的问题,并通过以下方式解决了它(Laravel 5):

  1. 创建一个迁移,添加字段' last_online'到您的用户表
  2. class AddLastOnlineToUsersTable extends Migration
    {
        public function up()
        {
            Schema::table('users', function (Blueprint $table) 
            {
                $table->dateTime('last_online');
            });
        }
    
    
        public function down()
        {
            Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('last_online');
        });
    }
    

    不要忘记将新字段添加到用户模型中的$ fillable和$ dates数组中。

    1. 如果您使用抽象Controller类作为所有控制器的基础(如果不是,您应该考虑它),您可以将以下内容添加到此控制器:
    2. abstract class Controller extends BaseController 
      {
          public function __construct()
          {
              $this->user = Auth::user();
              if($this->user)
              {
                  $this->user->last_online = Carbon::now();
                  $this->user->save();
              }
          }
      }
      
      1. 使用以下功能创建GetUsersOnlineRepository(或者服务)(不要忘记包含Carbon \ Carbon和用户模型):
      2. public function getAllUsersOnline($seconds_since_last_activity = 300)
        {
            $last_activity = Carbon::now()->subSeconds($seconds_since_last_activity);
            $online_users = User::where('last_online', '>=', $last_activity)->get(['id', 'user_name']);
            return $online_users;
        }
        
        1. 在您的控制器中,在此新存储库/服务中调用函数getAllUsersOnline()。