Ali
3 سال پیش توسط Ali مطرح شد
10 پاسخ

یوزر های انلاین لاراول وب ساکت

سلام چطوری میتونم لیست یوزر های انلاین رو بگیرم ؟


ثبت پرسش جدید
حمید
تخصص : لاراول
@hamidTst 3 سال پیش آپدیت شد
0

یه migration به اسم دلخواه بساز

php artisan make:migration add_new_column_last_seen

یه فیلد به اسم دلخواه مثلا lastseen در جدول user ها اضافه کن

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddNewColumnLastSeen extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function(Blueprint $table){
            $table->timestamp('last_seen')->nullable();
        });
    } 

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {

    }
}

یه middleware بساز که برای همه route ها بتونی اعمالش کنی

php artisan make:middleware UserActivity

این دستور رو داخل متد handle بزار
این کد یه کش با مدت زمان دو دقیقه با id اون کاربر می سازه و می تونی چک کنی که تا دوقیقه پیش کی آنلاین بوده وکی آنلاین نیست

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Auth;
use Cache;
use App\Models\User;

class UserActivity
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if (Auth::check()) {
            $expiresAt = now()->addMinutes(2); /* keep online for 2 min */
            Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);

            /* last seen */
            User::where('id', Auth::user()->id)->update(['last_seen' => now()]);
        }

        return $next($request);
    }
} 

حالا مثلا توی پنل ادمینت توی یه لیستی میخوای نشون بدی کی آنلاینه و کی آفلاینه

 @extends('layouts.app')

@section('content')
<div class="container">
    <h1>Laravel Display Online Users - ItSolutionStuff.com</h1>

    <table class="table table-bordered data-table">
        <thead>
            <tr>
                <th>No</th>
                <th>Name</th>
                <th>Email</th>
                <th>Last Seen</th>
                <th>Status</th>
            </tr>
        </thead>
        <tbody>
            @foreach($users as $user)
                <tr>
                    <td>{{ $user->id }}</td>
                    <td>{{ $user->name }}</td>
                    <td>{{ $user->email }}</td>
                    <td>
                        {{ Carbon\Carbon::parse($user->last_seen)->diffForHumans() }}
                    </td>
                    <td>
                        @if(Cache::has('user-is-online-' . $user->id))
                            <span class="text-success">Online</span>
                        @else
                            <span class="text-secondary">Offline</span>
                        @endif
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>
</div>
@endsection 

fgh
تخصص : توسعه دهنده لاراول
@fgh 3 سال پیش مطرح شد
0

ببین اگه بتونی از لایو وایر استفاده کنی خیلی خوبه توی دوره لایو وایر اتفاقا پروژه آخرش مرتبطه


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
0

@hamidShahbazi
درود...
این قابلیت توی پروژه ام استفاده کردم ولی خوب عمل نمی کنه...
موقعی که ورود می کنم نمی زنه آنلاین...
همش آفلاینه...


حسین
@h.j432 3 سال پیش مطرح شد
0

تب network قسمت WS سایت roocket رو نگاه کنین متوجه میشین داره از websocket استفاده میکنه
احتمالا یه سرور nodejs اون پشت هست که کاربر های آنلاین رو ذخیره میکنه و موقع آفلاین شدن هم حذفشون میکنه


حمید
تخصص : لاراول
@hamidTst 3 سال پیش آپدیت شد
1

@endworld
درود..
در کل این روش داره زمانی که یه کاربر لاگین میکنه ، یک کش میسازه (با اسم ثابت و در آخرش user->id) که مقدارش true و زمان اعتبارش دو دقیقه هست (که میتونید اصلا زمان براش تعریف نکنید و forever باشه و زمانی که logout کرد کش حذف بشه)

Cache::put('user-is-online-' . $user->id, true, now()->addMinutes(2))

حالا شما زمانی که میخوایید بفهمید که کاربر آنلاین هست یا نه؟؟ باید چک کنی که این کش با آیدی یوز مورد نظر وجود داره یانه که اگر کش وجود داشت ،کاربر آنلاینه و اگر وجود نداشت ، کاربر آنلاین نیست.
حالا اینکه کار نمیکنه ببیند اصلا کش ساخته میشه ؟؟ مثلا توی همون middleware یه dd بگیرید ببینید اصلا موقع لاگین middleware کار میکنه؟؟ شاید middleware رو توی kernel اضافه نکردید یا همچین اشتباهاتی...


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
0

@hamidShahbazi
ممنون .. اوکی شد🙏
توی کرنل فراخوانی نکردم


m38
@tarfader.58 3 سال پیش آپدیت شد
0

بابا من خیلی نوب تازه واردم
اما نمیشه است روش که یه فیلد تو جدول user قرار داد و موقع لاگین کرد با سشن بگیم اون فیلد جدول true کنه و هر مدقع سشن هم رفت بره اون فیلد جدول false کنه
این نمیشه ؟ چرا اینو نگفتید ؟
@hamidShahbazi @endworld


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
0

@tarfader.58
همین سشن اعتبار دو دقیقه ای داره و کاربر خارج بشه false میشه...


m38
@tarfader.58 3 سال پیش آپدیت شد
0

خوب وقتی کاربر خارج بشه یعنی انلاین نیست دیگه و مقدارم false میشه
@endworld


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام