我的目标是检查用户表中的所有用户,看看他们是否在线使用Laravel 4
。
我也对谁没有登录感兴趣。
后来,我想打印出2个单独的在线列表和谁不在线列表?
Auth::check()
?database
上的任何内容?示例
答案 0 :(得分:4)
无法知道用户是否仍在您的网站上。你只能用一些方法来猜测它们是不是。
最常用的方法是保存用户上次访问某个页面的时间戳。如果您说用户在一页上停留一分钟,则可以说如果上一个时间戳与当前时间戳之间的时间不到一分钟,则该用户在线。
Facebook使用一种ping函数来检查这一点。他们每隔x秒向服务器发送一次ajax请求。这样他们就知道用户仍然在网站上。
答案 1 :(得分: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):
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数组中。
abstract class Controller extends BaseController { public function __construct() { $this->user = Auth::user(); if($this->user) { $this->user->last_online = Carbon::now(); $this->user->save(); } } }
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; }