
本文将指导你如何在 Laravel 应用中统计在线用户数量。通过使用缓存机制和中间件,记录用户的活动状态,并提供了一种简单有效的方法来计算当前在线用户数,最终将结果展示在视图中。本文提供了完整的代码示例,帮助开发者快速实现这一功能。
实现原理
核心思想是利用 Laravel 的缓存系统来记录用户的在线状态。当用户活动时,通过中间件在缓存中设置一个与用户 ID 相关的键。然后,通过遍历所有用户,检查其对应的缓存键是否存在,从而统计在线用户数量。
步骤详解
创建中间件
首先,创建一个中间件来记录用户的最后活动时间。当用户发起请求时,该中间件会在缓存中设置一个键,表示用户在线。
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
use Cache;
use Carbon\Carbon;
class LastUserActivity
{
/**
* 处理传入的请求。
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check()) {
$expiresAt = Carbon::now()->addMinutes(1);
Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
}
return $next($request);
}
}说明:
注册中间件:
在 app/Http/Kernel.php 文件中注册该中间件。你可以将其添加到 $middlewareGroups 或 $routeMiddleware 数组中。
例如,添加到 $middlewareGroups 中的 web 组:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\LastUserActivity::class, // 添加中间件
],
'api' => [
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];创建控制器方法来统计在线用户数
创建一个控制器方法,用于统计在线用户数量。该方法会查询数据库中的所有用户,并检查其对应的缓存键是否存在。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use Cache;
class UserController extends Controller
{
/**
* 显示在线用户数量。
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function numberOfOnlineUsers()
{
$users = DB::table('users')->get();
$counter = 0;
foreach ($users as $user) {
if (Cache::has('user-is-online-' . $user->id)) {
$counter++;
}
}
// 将 $counter 传递给视图
return view("your_blade_file_name", ['counter' => $counter]);
}
}说明:
在视图中显示在线用户数
在你的 Blade 视图文件中,使用以下代码来显示在线用户数:
<p>在线用户数量: {{ $counter }}</p>说明:
创建路由
为了访问这个控制器方法,你需要定义一个路由。
Route::get('/online-users', 'UserController@numberOfOnlineUsers');注意事项
总结
通过使用 Laravel 的缓存系统和中间件,你可以轻松地统计在线用户数量。这种方法简单易用,并且可以根据应用程序的需求进行定制。记得根据实际情况调整缓存时间,并考虑性能和并发问题。
以上就是统计 Laravel 应用中的在线用户数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号