Session Terminated - Yapılan Değişiklikler Analizi
22 Aralık 2025, Sabah 04:15:33
a630a4cd9 - 🔐 Muzibu Device/Session Limit System Overhaul
33 dosya değişti, +1303 satır eklendi, -718 satır silindi
Dün akşam 10'dan sonra TEK BİR BÜYÜK DEĞİŞİKLİK yapıldı:
Her tarayıcıya özel bir "kimlik kartı" (mzb_login_token) veriliyor. Aynı tarayıcıdan tekrar giriş yapınca yeni cihaz olarak sayılmıyor.
Yeni cihaz girişinde en eski cihaz otomatik çıkış yapıyor. Kullanıcıdan onay isteme kaldırıldı.
Session kontrol endpoint'i artık sınırsız. "Çok fazla istek" hatası vermiyor.
Session silinirken hem database, hem Redis, hem cache aynı anda temizleniyor.
⚠️ ÖNEMLİ NOT:
Bu değişiklikler teoride doğru ama pratikçe cookie timing sorunu yaratmış olabilir. Login sonrası cookie browser'a ulaşmadan session check yapılıyor ve loop oluşuyor.
registerSession() Fonksiyonu
sessionExists() Fonksiyonu
terminateSessionAtomicByRow() - YENİ
Cookie Fallback Eklendi (satır 194-207)
if (!$cookieToken) {
// Session varsa cookie yok = yeni login, geçerli
$userSession = DB::table('user_active_sessions')
->where('user_id', $user->id)
->first();
if ($userSession) {
return ['valid' => true]; // ✓
}
}
Session Termination Message
store() - Login Sonrası
create() - Login Page
check-session ve active-devices endpoint'leri throttle dışına alındı.
Route::prefix('auth')->group(function () {
Route::get('/check-session', ...); // No throttle
Route::get('/active-devices', ...); // No throttle
});
Stream ve HLS serve endpoint'lerinde login_token kontrolü eklendi.
429 ve network error artık logout tetiklemiyor.
if (response.status === 429) {
// Sadece log, logout YOK
console.warn('Rate limit, retrying...');
return; // Don't logout
}
Modules/Muzibu/app/Services/DeviceService.phpapp/Http/Controllers/Api/Auth/AuthController.phpapp/Http/Controllers/Auth/AuthenticatedSessionController.phpapp/Services/SignedUrlService.phpapp/Http/Middleware/CheckDeviceLimit.php (deleted)app/Services/Auth/DeviceService.php (deleted)Modules/Muzibu/Http/Controllers/Api/SongStreamController.phpModules/Favorite/routes/api.phpModules/Muzibu/lang/en/front.phpModules/Muzibu/lang/tr/front.phppublic/themes/muzibu/js/player/core/player-core.jspublic/themes/muzibu/js/player/features/play-helpers.jspublic/themes/muzibu/js/muzibu-store.jsresources/views/themes/muzibu/components/session-check.blade.phpresources/views/themes/muzibu/components/player.blade.phpresources/views/themes/muzibu/components/header.blade.php+18 card component dosyasıbootstrap/app.phproutes/api.phproutes/web.phpapp/Providers/TenancyServiceProvider.php
SORUN: Login sonrası cookie queue()->cookie() ile ekleniyor ama hemen browser'a gitmiyor.
Session check 2 saniye sonra başlıyor ama cookie henüz gelmemiş olabilir.
→ Bu değişiklikten önce bu sorun yoktu çünkü token her zaman DB'deydi ve login_token cookie'sine bağlı değildi.
SORUN: sessionExists() içinde fallback var: "Cookie yoksa tek session varsa geçerli say".
Ama kullanıcının birden fazla session'ı varsa (başka cihazlarda) fallback çalışmıyor ve FALSE dönüyor.
→ İlk check'te tek session, fallback çalışıyor. İkinci check'te (5 saniye sonra) cookie hala yok ve artık fallback çalışmıyor → LOGOUT!
SORUN: Device limit modal kaldırıldı. Login page'de authenticated kullanıcı direkt anasayfaya yönlendiriliyor. Ama session terminated ile gelen kullanıcı hala authenticated, loop oluşuyor.
→ Bu değişiklikten önce modal vardı ve authenticated kullanıcı modal görebiliyordu.
SORUN: LIFO artık otomatik çalışıyor, kullanıcıya sormadan eski session siliniyor. Yanlış session terminate olursa kullanıcı hiç haberdar olmayabilir.
→ Bu değişiklikten önce kullanıcı hangi cihazı çıkış yaptıracağını seçiyordu.
BÜYÜK DEĞİŞİKLİK - 33 dosya, 1303+ satır