Session Logout Problemi - Derin Analiz

Kullanıcıların beklenmedik şekilde çıkış yapması

Kritik Sorun

Problem Özeti

Basit Anlatım

Kullanıcılar giriş yaptıktan sonra aniden "Oturum Süresi Doldu" hatası alıyor. Sayfa yenilendiğinde veya başka bir sayfaya geçildiğinde oturum kayboluyor. Sorun: Cookie ayarlarında ciddi tutarsızlıklar var.

Teknik Özet

  • Cookie domain: www.muzibu.com vs .muzibu.com
  • Cookie name: laravel_session_1001 vs tenant_1001_session
  • Redis prefix: Tenant prefix uygulanmıyor
  • Memory fragmentation: 2.75 (düzeltilmiş)
1

Cookie Domain Tutarsızlığı

KRİTİK

Basit Anlatım

Cookie domain www.muzibu.com olarak ayarlanıyor. Bu demek ki sadece www.muzibu.com'da çalışır. Kullanıcı muzibu.com'a gittiğinde oturumu kaybolur!

Teknik Detay

Mevcut: domain=www.muzibu.com
Olması gereken: domain=.muzibu.com

Kanıt (curl çıktısı):

set-cookie: laravel_session_1001=...; domain=www.muzibu.com; secure; httponly

Beklenen: domain=.muzibu.com (leading dot ile tüm subdomain'lerde çalışır)

2

Cookie Name Karışıklığı

KRİTİK

Basit Anlatım

Sistem bazen laravel_session_1001, bazen tenant_1001_session cookie adı kullanıyor. Kullanıcıların tarayıcılarında her iki cookie de var - bu ciddi karışıklığa neden oluyor!

Teknik Detay

Kullanıcılarda görülen cookie'ler:

  • tenant_1001_session (yeni, doğru)
  • laravel_session_1001 (eski, çakışıyor)
  • muzibu_session (çok eski)

Sonuç: SetTenantSessionConfig middleware tenant_1001_session ayarlıyor ama login sayfası hâlâ laravel_session_1001 set ediyor.

3

Redis Session Prefix Sorunu

YÜKSEK

Basit Anlatım

Redis'e kaydedilen session key'leri tenant prefix'i olmadan saklanıyor. Bu, farklı tenant'ların session'larının karışmasına neden olabilir.

Teknik Detay

Mevcut: session_XXX
Olması gereken: tenant_1001_session_XXX

Redis key örnekleri:

session_32cJXToBcGZERaPoEH6iS34ULxJFicAizlMD5pEg
session_zp25zPCOe5XQKE3gTF0qhppzdkM4TVBHLvHyDxhU
session_I9j0CohQDhWUTRA9gJNKkbYt5LL2F0itBZxj3Azt

Sistem Metrikleri

1,895
Aktif Session
2.75
Mem Fragmentation
(Normal: <2)
20.6M
Expired Keys
238MB
Redis Memory

Cookie Akış Sorunu

1

Kullanıcı www.muzibu.com/login sayfasına gelir

2

Sistem laravel_session_1001 cookie'si set eder (domain: www.muzibu.com)

3

SetTenantSessionConfig middleware tenant_1001_session cookie'si set eder (domain: .muzibu.com)

!

ÇAKIŞMA: İki farklı cookie, iki farklı domain - hangi session geçerli belirsiz!

4

Sayfa yenilendiğinde veya AJAX isteklerinde session uyuşmazlığı → 419 Page Expired

Etkilenen Dosyalar

Dosya Sorun Öncelik
app/Http/Middleware/SetTenantSessionConfig.php Cookie config timing sorunu Kritik
app/Providers/TenancyServiceProvider.php Redis session prefix çalışmıyor Yüksek
config/session.php Cookie name config Yüksek
.env SESSION_DOMAIN ayarı Orta

AI Browser Agent Test Prompt

Bu prompt'u AI Browser Agent'a vererek detaylı test yapılabilir:

## Muzibu Session/Cookie Test Görevi

**Amaç:** Login sonrası session kaybı ve cookie tutarsızlıklarını tespit etmek.

**Test Hesabı:**
- URL: https://www.muzibu.com/login
- Email: nurullah@nurullah.net
- Şifre: g0nulcelen

**Test Adımları:**

### 1. PRE-LOGIN KONTROLLER
- https://www.muzibu.com/login sayfasına git
- Browser DevTools → Application → Cookies aç
- Mevcut tüm cookie'leri listele ve raporla
- Özellikle şu cookie'leri ara: tenant_1001_session, laravel_session_1001, muzibu_session, XSRF-TOKEN

### 2. LOGIN İŞLEMİ
- Email ve şifreyi gir
- Login butonuna tıkla
- Redirect sonrası sayfanın tam yüklenmesini bekle

### 3. POST-LOGIN COOKIE ANALİZİ
- DevTools → Cookies'i tekrar kontrol et
- Her cookie için şunları raporla:
  - Cookie adı
  - Domain (önemli: www.muzibu.com mu, .muzibu.com mu?)
  - Path
  - Expires
  - HttpOnly durumu
  - Secure durumu

### 4. SESSION TESTİ
- Ana sayfada F5 ile sayfayı yenile
- Hâlâ giriş yapmış mı kontrol et
- Header'daki kullanıcı adını/profil ikonunu kontrol et

### 5. NAVIGATION TESTİ
- Sol menüden "Şarkılar" linkine tıkla
- Şarkılar sayfası yüklensin
- Hâlâ giriş yapmış mı kontrol et
- "Albümler" sayfasına git
- Hâlâ giriş yapmış mı kontrol et

### 6. API REQUEST TESTİ
- DevTools → Network sekmesini aç
- XHR/Fetch filtrele
- Herhangi bir sayfada bekle (favoriler, playlist vs.)
- API isteklerinin response'larını kontrol et
- 401 veya 419 hatası var mı?

### 7. TIMEOUT TESTİ
- Sayfada 2-3 dakika bekle (hiçbir şey yapma)
- Sonra herhangi bir butona tıkla veya sayfayı yenile
- "Oturum Süresi Doldu" hatası alındı mı?

### 8. CONSOLE HATALARI
- DevTools → Console sekmesini aç
- Kırmızı (error) logları listele
- Özellikle "419", "CSRF", "session", "expired" içeren hataları raporla

### 9. REQUEST HEADERS
- Herhangi bir sayfaya geçerken Network sekmesinde ilk HTML isteğini bul
- Request Headers'da "Cookie" header'ını kontrol et
- Hangi session cookie'si gönderiliyor?

### 10. SONUÇ RAPORU
Şu başlıklarda rapor hazırla:
- [ ] Login başarılı mı?
- [ ] Cookie domain doğru mu? (.muzibu.com olmalı)
- [ ] Cookie name tutarlı mı? (tenant_1001_session olmalı)
- [ ] Session sayfa yenilemesinde korunuyor mu?
- [ ] Navigasyon sırasında session korunuyor mu?
- [ ] API isteklerinde hata var mı?
- [ ] Console'da session/CSRF hatası var mı?
- [ ] Timeout sonrası session hâlâ geçerli mi?

**Ek Notlar:**
- Her adımda screenshot al
- Herhangi bir hata görürsen detaylı açıkla
- Cookie değerlerini tamamen değil, ilk 20 karakterini yaz (güvenlik)
- "Oturum Süresi Doldu" modal'ı görürsen hemen bildir

Olası Çözüm Yolları

1

.env SESSION_DOMAIN Düzeltmesi

SESSION_DOMAIN'i leading dot ile ayarla:

SESSION_DOMAIN=.muzibu.com
2

Cookie Name Standardizasyonu

Tek bir cookie adı kullan, eski cookie'leri temizle:

SESSION_COOKIE=tenant_1001_session
3

SetTenantSessionConfig Timing Fix

Middleware'in session başlamadan ÖNCE config'i ayarladığından emin ol.

4

Eski Cookie Cleanup

SetTenantSessionConfig'de laravel_session_1001 cookie'sini de expire listesine ekle.