簡體   English   中英

計數活動的緩存會話 Laravel。 (需要建議)

[英]Count active Cache sessions Laravel. (Advice Needed)

在這里遇到了一個問題,幾天來一直在努力尋找解決方案。 我希望能夠計算我的 Laravel 應用程序中的在線用戶數量。

我已經內置了一個系統,用於在管理面板的應用程序中顯示在線和離線用戶狀態。

然而,我試圖讓一個計數器只顯示在線用戶的數值。 下面是我用來顯示在線離線狀態的代碼。 但是現在我試圖在使用 count(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>

因為您對緩存中的每個用戶都有唯一的鍵。 在您的情況下,您無法通過部分鍵找到它。 您可以像在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++;   
        }
    }
    
    echo "Number of online users: " . $counter;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM