Heim > PHP-Framework > Laravel > Hauptteil

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

藏色散人
Freigeben: 2023-03-31 14:56:17
nach vorne
1059 Leute haben es durchsucht

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;]);
        });
    }
}
Nach dem Login kopieren

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);
    }
}
Nach dem Login kopieren

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,
        //其它
    ];
Nach dem Login kopieren

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;], //添加在线时长中间件
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!