session()->get('xguard'); if (! Auth::check() || ! $sesi) { return $next($request); } $berakhirSub = Cache::get(self::kunciSub($sesi['claims']['sub'] ?? '')); if (($sesi['sid'] && Cache::has(self::kunciSid($sesi['sid']))) || ($berakhirSub && $berakhirSub >= $sesi['login_at'])) { self::akhiriSesiLokal($request); return redirect('/')->with('pesan', 'Anda sudah keluar dari X-Guard di aplikasi lain, jadi sesi di sini juga diakhiri.'); } $tiap = (int) config('contoh.cek_sesi_detik'); if ($tiap > 0 && $request->isMethod('GET') && ! $request->expectsJson() && now()->getTimestamp() - $sesi['checked_at'] >= $tiap) { $request->session()->put('url.intended', $request->fullUrl()); return redirect()->route('sso.cek-sesi'); } return $next($request); } public static function akhiriSesiLokal(Request $request): void { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); } public static function kunciSid(string $sid): string { return 'xguard:sid-berakhir:'.$sid; } public static function kunciSub(string $sub): string { return 'xguard:sub-berakhir:'.$sub; } }