Session Logout Problemi

KESİN KANIT BULUNDU - v3

KRİTİK 13 Şubat 2026

SORUN REPRODUCE EDİLDİ

AI Browser Agent ile test edildi. 419 hatası kesin olarak tetiklendi.

ABA Test Sonucu

Test Senaryosu:

  1. 1. Normal login yapıldı ✓
  2. 2. 4 adet sahte session cookie eklendi ✓
  3. 3. F5 ile sayfa yenilendi → 419 HATA!

Eklenen Sahte Cookie'ler:

tenant_1001_session = FAKE... (www.muzibu.com)
laravel_session_1001 = FAKE... (www.muzibu.com)
tenant_1001_session = FAKE... (.muzibu.com)
laravel_session_1001 = FAKE... (.muzibu.com)

EN KRİTİK BULGU: KISIR DÖNGÜ

419 hatası aldıktan sonra normal yollarla kurtuluş YOK! Kullanıcı ne yaparsa yapsın 419 döngüsünde kalıyor.

Denenen Yöntem Sonuç
Sayfayı Yenile (F5) ❌ Tekrar 419
"Sayfayı Yenile" butonu ❌ Tekrar 419
JavaScript ile cookie temizleme ❌ HttpOnly silinemez
/logout endpoint'ine gitme ⚠️ Giriş yapınca tekrar 419
localStorage/sessionStorage temizleme ❌ Etkisiz
Hard Refresh (Cmd+Shift+R) ✅ TEK ÇÖZÜM

Normal kullanıcılar Hard Refresh (Cmd+Shift+R) bilmez! Bu, onlar için çıkışı olmayan bir tuzak.

Sorunun Mekanizması

1

Çoklu Cookie Birikimi

Sistem farklı zamanlarda farklı cookie adları oluşturdu. Kullanıcının tarayıcısında birden fazla session cookie birikti.

2

Tarayıcı Rastgele Cookie Gönderir

Request yapıldığında tarayıcı hangi cookie'yi göndereceğini karıştırır. Bazen doğru, bazen yanlış cookie gider.

3

CSRF Token Uyuşmazlığı → 419

Yanlış session cookie gönderildiğinde, server'daki CSRF token ile eşleşmez. Laravel 419 hatası fırlatır.

!

KISIR DÖNGÜ

419 sayfasındaki "Sayfayı Yenile" butonu aynı bozuk cookie'lerle istek yapar → tekrar 419. HttpOnly cookie'ler JavaScript ile silinemez. Kullanıcı tuzakta kalır.

Kök Neden (Kesin)

Cookie Çakışması

Aynı anda birden fazla session cookie mevcut:

tenant_1001_session (.muzibu.com)
laravel_session_1001 (www.muzibu.com)
muzibu_session (eski)

Eksik Temizleme

SetTenantSessionConfig.php satır 129:

// Sadece bunlar temizleniyor:
['muzibu_session', 'laravel_session']
// EKSİK:
'laravel_session_1001' ← BU YOK!

Çözüm Planı ACİL

1

419 Sayfasında Cookie Flush

EN ACİL

419 hatası oluştuğunda, response header'larında TÜM session cookie'lerini expire et. Böylece kullanıcı "Sayfayı Yenile" dediğinde temiz başlar.

// Dosya: app/Exceptions/Handler.php veya 419.blade.php
// 419 response'unda şu header'ları ekle:
Set-Cookie: tenant_1001_session=; expires=Thu, 01 Jan 1970; path=/; domain=.muzibu.com
Set-Cookie: laravel_session_1001=; expires=Thu, 01 Jan 1970; path=/; domain=.muzibu.com
Set-Cookie: laravel_session_1001=; expires=Thu, 01 Jan 1970; path=/; domain=www.muzibu.com
Set-Cookie: muzibu_session=; expires=Thu, 01 Jan 1970; path=/; domain=.muzibu.com
Set-Cookie: XSRF-TOKEN=; expires=Thu, 01 Jan 1970; path=/; domain=.muzibu.com

Bu, kısır döngüyü kırar. Kullanıcı tekrar giriş yapabilir.

2

Eski Cookie Temizleme Listesini Güncelle

YÜKSEK

app/Http/Middleware/SetTenantSessionConfig.php - Satır 129

$possibleOldCookies = ['muzibu_session', 'laravel_session'];
$possibleOldCookies = [ 'muzibu_session', 'laravel_session', 'laravel_session_1001', // ← EKSİK OLAN 'laravel_session_1', 'PHPSESSID', ];
3

Her Response'da Eski Cookie'leri Expire Et

ORTA

Sadece request'te varsa değil, HER response'da potansiyel eski cookie'leri expire et. Böylece kullanıcı siteyi her ziyaret ettiğinde temizlenir.

Güvenlik Garantisi ÖNEMLİ

Mevcut Kullanıcılara ZARAR VERİLMEYECEK

Bu çözümler sadece ESKİ ve BOZUK cookie'leri temizler. Aktif oturumlar ve Redis session verileri korunacaktır.

Yapılacaklar

  • Eski cookie'leri expire et

    laravel_session_1001, muzibu_session

  • 419 sayfasında bozuk cookie'leri temizle

    Sıkışmış kullanıcıları kurtar

  • Yeni cookie'ye dokunma

    tenant_1001_session korunacak

ASLA Yapılmayacaklar

  • redis-cli FLUSHALL

    Tüm session'ları siler!

  • redis-cli DEL session_*

    Session verilerini siler!

  • tenant_1001_session expire

    Aktif kullanıcıları logout eder!

Sonuç:

Sorunsuz Kullanıcı

Hiçbir şey farketmez, çalışmaya devam

419'da Sıkışmış Kullanıcı

Kurtulur, tekrar giriş yapabilir

Değiştirilecek Dosyalar

Dosya Değişiklik Öncelik
resources/views/errors/419.blade.php Cookie flush header'ları ekle ACİL
app/Http/Middleware/SetTenantSessionConfig.php Eski cookie listesine laravel_session_1001 ekle Yüksek
app/Exceptions/Handler.php 419 exception'da cookie temizleme Orta

ABA Test Detayları

Test Adımları:

  1. ✅ Normal login yapıldı
  2. ✅ /api/user → 200 OK (session aktif)
  3. ✅ 4 sahte cookie eklendi
  4. ✅ F5 ile sayfa yenilendi
  5. 🔴 419 hatası alındı
  6. 🔴 "Sayfayı Yenile" butonu → tekrar 419
  7. 🔴 /logout → giriş yapınca tekrar 419
  8. ✅ Hard Refresh ile düzeldi

419 Hata Sayfası İçeriği:

Tab: "Oturum Süresi Doldu - 419"

Mesaj:

"Formda çok uzun süre beklediniz. Güvenlik nedeniyle sayfayı yenilemeniz gerekiyor."

Butonlar:

"Sayfayı Yenile", "Kapat", "Yeniden Giriş Yap"

Uygulama Öncelik Sırası

1

419 sayfasında cookie flush

Kısır döngüyü kırar, mevcut sıkışmış kullanıcıları kurtarır

2

Eski cookie temizleme listesini güncelle

Yeni 419 hatalarını önler

3

Her response'da eski cookie'leri expire et

Uzun vadeli temizlik