计算活动的缓存会话 Laravel。 (需要建议)

Posted

技术标签:

【中文标题】计算活动的缓存会话 Laravel。 (需要建议)【英文标题】:Count active Cache sessions Laravel. (Advice Needed) 【发布时间】:2021-12-09 05:12:17 【问题描述】:

在这里遇到问题,并且几天来一直在努力寻找解决方案。 我希望能够统计我的 Laravel 应用程序中的在线用户数量。

我已经构建了一个系统,用于在管理面板的应用程序中显示在线和离线用户状态。

但是我试图获得一个计数器来显示在线用户的数值。 下面是我用于显示在线离线状态的代码。 但是现在我尝试在使用计数时调用(Cache::has('user-is-online') 但是我无法让它工作。 希望有人能像我所说的那样提供帮助。

对于我确实设法构建的内容,我使用了以下内容:

创建的中间件:

    <?php

namespace App\Http\Middleware;

use Closure;
use Auth;
use Cache;
use Carbon\Carbon;

class LastUserActivity

    /**
     * Handle an incoming request.
     *
     * @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);
    

创建的控制器:

 <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use Cache;

class UserController extends Controller


    /**
     * Show user online status.
     *
     */
    public function userOnlineStatus()
    
        $users = DB::table('users')->get();

        foreach ($users as $user) 
            if (Cache::has('user-is-online-' . $user->id))
                echo "User " . $user->name . " is online.";
            else
                echo "User " . $user->name . " is offline.";
        
    

创建的路线:

 Route::get('/check', 'StatusController@userOnlineStatus');

我称之为:

 <td>
                            @if(Cache::has('user-is-online-' . $user->id))
                                <span class="badge badge-warning rounded-0 w-100">Online</span>
                            @else
                                <span class="badge badge-danger rounded-0 w-100">Offline</span>
                            @endif
                    </td>

【问题讨论】:

【参考方案1】:

因为您对缓存中的每个用户都有唯一的密钥。在您的情况下,您无法通过部分键找到它。您可以像在 userOnlineStatus 函数中一样保留一个计数器,然后打印结果。往下看。

/**
 * Show number of online users.
 *
 */
public function numberOfOnlineUsers()

    $users = DB::table('users')->get();
    $counter = 0;
    foreach ($users as $user) 
        if (Cache::has('user-is-online-' . $user->id)) 
            $counter++;   
        
    
    
   
    //Passing $counter to the view

    return view("your_blade_file_name", ['counter' => $counter]);

在刀片文件中访问

The number of online users are  $counter 

【讨论】:

哇,感谢您的代码!我对 Laravel 很陌生。所以我将在我的控制器中的其他功能下添加这个功能。我是否需要配置一条新路线来获得这个?什么方法最适合我从 laravel 刀片文件中调用计数?非常感谢 如果你想将它作为一个单独的函数使用,那么你需要配置路由。将此计数器变量传递给刀片文件。我将编辑上面的答案,向您展示如何将参数传递给刀片文件。但是你会在 laravel 网站上找到更好的文档。 再次感谢您的帮助真的为我解决了这一切。我刚刚在网站上问了另一个问题,希望你有时间可以再看看!

以上是关于计算活动的缓存会话 Laravel。 (需要建议)的主要内容,如果未能解决你的问题,请参考以下文章

当用户会话处于活动状态时使用 Laravel 5.7 中的 Auth 重定向到页面的方法

Laravel 不活动时间设置

Laravel 会话过期事件

在 laravel 5.1 中打印所有正在运行的会话变量

会话不是用 Laravel 5 编写的

laravel 8 +惯性js中的会话超时