Online kullanıcıları listelemenin çok fazla yolu bulunmakta. Ben bu yollardan Cache ile birlikte kullanımını göstereceğim. Örnek vereceğim senaryoda amaç sadece online kullanıcıları listelemek olacaktır. Kullanıcının online olma durumuna göre bir işlem yapılmayacaktır. Online kullanıcıları listelemek için yapacağımız örnekte mevcut bir Laravel projeniz olduğu ve auth yapısının kurulmuş olduğunu varsayıyorum. Eğer oluşturmuş bir projeniz yoksa yeni bir proje oluşturup auth yapısını kurmalısınız. 

Proje kurmak için yardımcı bağlantı: https://laravel.com/docs/8.x/installation

Auth. scaffolding için yardımcı bağlantı: https://laravel.com/docs/8.x/authentication

 

Şimdi örneğimize gelelim. Öncelikle kullanıcının yaptığı işlemleri yakalamak için bir middleware oluşturalım ve komut satırımıza kodlarımızı yazalım.

php artisan make:middleware UserActivity

 

UserActivity adında bir middleware oluşturduk. Oluşturmuş olduğumuz middleware'in içerisine gidip gerekli işlemlerimizi yapalım. app > Http > Middleware > UserActivity.php yolunda bulunan dosyamızın boot() methodu içerisine gerekli kodlarımızı yazalım. 

// UserActivity.php
<?php

namespace App\Http\Middleware;

use Closure;
use Cache;


class UserActivity
{

	public function handle($request, Closure $next)
	{
    	if (auth()->check()) {
        	Cache::put('user-online-' . auth()->user()->id, true, now()->addMinute());
    	}
        	return $next($request);
	}
}

 

Burada middleware ile birlikte giriş yapmış olan kullanıcımızın idsini alıyoruz ve cache işleminin süresini 1 dakika için ayarlıyoruz. Yani burada cache ile birlikte son 1 dakika içerisinde işlem yapmış olan kullanıcıyı online olarak nitelendiriyoruz. 

 

Şimdi oluşturmuş olduğumuz middleware'i Kernel dosyamızın içerisine ekleyelim. app > Http > Kernel.php dosyamızı açıp protected $middlewareGroups arrayimizin web keyinin içerisine ekliyoruz. 

 

// Kernel.php

protected $middlewareGroups = [
    
    'web' => [
        ...
        ...
        \App\Http\Middleware\UserActivity::class
    ]
 
]

 

Artık kullanıcılarımızın online olup olmadıklarını yakalayabiliriz. Basit olması için örnek olarak bir blade dosyası üzerinde göstereceğim. Bunu cache sınıfını kullanarak her yerde kullanabilirsiniz. 

 

// index.blade.php (Controller üzerinden $users değişkeni içerisinde kullanıcıların gönderildiğini varsayalım.)

<table>
    @foreach($users as $user)
       <td> {{ $user->name }} </td>
       <td> {{ Cache::has('user-online-'. $user->id) == true ? 'Online' : 'Offline'  }} </td>
    @endforeach
</table>

 

Listeleme işlemimiz bu kadar. Artık kullanıcıları online/offline şeklinde listeleyebiliriz. Bahsettiğim gibi bu işlemin birden fazla yöntemi mevcut. Siz de kullandığınız farklı yöntemler varsa paylaşabilirsiniz. 

Herkese iyi kodlamalar! 🤠