Heim >PHP-Framework >Laravel >Ausführliche Erklärung, wie die Laravel-Middleware die Online-Zeit des Benutzers zählt
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.
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('admin_users', function (Blueprint $table) { $table->unsignedInteger('spent')->default('0')->comment('使用时长')->after('id'); $table->timestamp('onlined_at')->nullable()->comment('最后访问时间')->after('updated_at'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('admin_users', function (Blueprint $table) { // $table->dropColumn(['spent', 'onlined_at']); }); } }
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 = 'auser-last-seen-'; //缓存标识 $lastSeenAt = Cache::get($seenKey . $user->id); // 获取上次访问时间戳 $now = Carbon::now(); if ($lastSeenAt != null) { $duration = $now->diffInSeconds($lastSeenAt); // 计算在线时长(秒数) $user->increment('spent', $duration, ['updated_at' => $user->updated_at, 'onlined_at' => $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 = [ //其它 'admin.spent' => \App\Http\Middleware\CountAdminUserOnlineTime::class, //其它 ];
dcat-admin zur Übersichtsseite hinzu, um die Benutzerdauer anzuzeigen:
'middleware' => ['web', 'admin'], // 默认值: 'middleware' => ['web', 'admin', 'admin.spent'], //添加在线时长中间件
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!