Heim >PHP-Framework >Laravel >Ausführliche Erklärung, wie die Laravel-Middleware die Online-Zeit des Benutzers zählt

Ausführliche Erklärung, wie die Laravel-Middleware die Online-Zeit des Benutzers zählt

藏色散人
藏色散人nach vorne
2023-03-31 14:56:171132Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Laravel. Er stellt hauptsächlich vor, wie Laravel-Middleware Statistiken über die Online-Zeit von Benutzern implementieren kann. Ich hoffe, dass er für alle hilfreich ist.

Ausführliche Erklärung, wie die Laravel-Middleware die Online-Zeit des Benutzers zählt

Laravel  –  Verstehen Sie, wann der Benutzer das letzte Mal online war und die gesamte Online-Zeit

Hier ist ein Beispiel für die Zählung der Online-Zeit von Back-End-Benutzern (admin_users); nur für Front-End-Benutzer Die entsprechende Tabelle ist unterschiedlich (entsprechend den Benutzern).

Bereiten Sie die Datenbank vor

Sie müssen hier zwei Felder hinzufügen, nämlich die letzte Online-Zeit und die gesamte Online-Zeit (in Sekunden):

<?php

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

class AddSpentToAdminUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table(&#39;admin_users&#39;, function (Blueprint $table) {
            $table->unsignedInteger(&#39;spent&#39;)->default(&#39;0&#39;)->comment(&#39;使用时长&#39;)->after(&#39;id&#39;);
            $table->timestamp(&#39;onlined_at&#39;)->nullable()->comment(&#39;最后访问时间&#39;)->after(&#39;updated_at&#39;);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table(&#39;admin_users&#39;, function (Blueprint $table) {
            //
            $table->dropColumn([&#39;spent&#39;, &#39;onlined_at&#39;]);
        });
    }
}

Middleware erstellen

<?php

namespace App\Http\Middleware;

use Carbon\Carbon;
use Closure;
use Dcat\Admin\Admin;
use Illuminate\Support\Facades\Cache;

class CountAdminUserOnlineTime
{
    public function handle($request, Closure $next)
    {
        $user = Admin::user(); // 获取当前认证用户
        //dd($user);
        if ($user) {
            $seenKey = &#39;auser-last-seen-&#39;; //缓存标识
            $lastSeenAt = Cache::get($seenKey . $user->id); // 获取上次访问时间戳
            $now = Carbon::now();

            if ($lastSeenAt != null) {
                $duration = $now->diffInSeconds($lastSeenAt); // 计算在线时长(秒数)
                $user->increment(&#39;spent&#39;, $duration, [&#39;updated_at&#39; => $user->updated_at, &#39;onlined_at&#39; => $now]); //updated_at 维持原值
            }

            Cache::put($seenKey . $user->id, $now, Carbon::now()->addMinutes(1)); // 保存当前访问时间戳(并设置缓存过期时间为一分钟)
        }

        return $next($request);
    }
}

Es ist sinnlos, die DB-Fassade zu verwenden Hier Um eine Aktualisierung des Felds {Update-Zeit} der Benutzertabelle zu vermeiden, verwenden Sie den zweiten Parameter der Inkrementfunktion, um den Wert „update_at“ unverändert zu lassen.

Anwendungs-Middleware

Fügen Sie eine $routeMiddleware in appHttpKernel.php hinzu Situationen: Fügen Sie:

protected $routeMiddleware = [
        //其它
        &#39;admin.spent&#39; => \App\Http\Middleware\CountAdminUserOnlineTime::class,
        //其它
    ];

dcat-admin zur Übersichtsseite hinzu, um die Benutzerdauer anzuzeigen:

&#39;middleware&#39; => [&#39;web&#39;, &#39;admin&#39;], // 默认值:
&#39;middleware&#39; => [&#39;web&#39;, &#39;admin&#39;, &#39;admin.spent&#39;], //添加在线时长中间件

Beispiel für statistische Ergebnisse

                                                                                                   

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie die Laravel-Middleware die Online-Zeit des Benutzers zählt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen