użytkownicy on-line

0

Hej,

aby uzyskać informację kto jest on-line zrobiłem coś takiego

  1. Utworzyłem middleware
    public function handle($request, Closure $next)
    {
        if(Auth::check())
        {
            $expiresAt = Carbon::now()->addMinutes(5);
            Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
        }

        return $next($request);
    }
  1. Do modelu usera dodałem
    public function isOnline()
    {
        return Cache::has('user-is-online-' . $this->id);
    }
  1. podpiąłem middleware
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\LogLastUserActivity::class,
        ],

i na liście userów

@if($user->isOnline())
          <li class="text-success">
                    Online
          </li>
@else
          <li class="text-muted">
                    Offline
          </li>
@endif

w czym jest problem?
otwieram sobie np. dwie przeglądarki i loguję się do aplikacji. W każdej przeglądarce widzę onLine tylko przy uzytkowniku, na którego jestem zalogowany. Czyli zamiast dwóch widzę jednego. Innego w każdej przeglądarce. Co robię źle?

0

Co robię źle?

No ale niby dlaczego miałbyś widzieć dwóch? Nie widzę żadnej pętli w Twoim kodzie.

0

@Patryk27: pobieram sobie wszystkich userów i wyświetlam ich w pętli oczywiście.
CHodzi o to, że jestem zalogowany na dwa konta ( dwie różne przeglądarki ) a na liście userów pokazuje mi online tylko dla jednego i to tego na którego jestem zalogowany :)
czyli
Browser 1: login as user_1, mam listę user_1, user_2 i tylko przy user_1 mam online
Browser 2: login as user_2, mam listę user_1, user_2 i tylko przy user_2 mam online

0

No to pokaż cały kod - skąd mogę wiedzieć czy problemu nie ma w innej jego części (tej, której nie pokazałeś)?
Btw, jaki masz sterownik pamięci podręcznej? Redis?

0

Wiesz, spojrzałem teraz w .env i CACHE_DRIVER jest domyślnie ustawiony na "array"
Zmieniłem na file i to pomogło.
Redis potem.
Chociaż nie. Array miałem ustawione bo wzorowałem się na Twoim "Domowniku" co do Cacheu.
Pisałeś, że jest on przekombinowany ale tak zostało. Więc może lepiej by było zostawić i dostosować on-line users pod cache=array?

1 użytkowników online, w tym zalogowanych: 0, gości: 1