Basit Anlatım
(Herkes İçin)Ne Oluyor?
Kullanıcılar siteye giriş yapıyor, bir süre geziniyor, sonra aniden "Oturum Süresi Doldu" hatası alıp çıkış yapılmış oluyor. Bu rastgele oluyor - bazen 2 dakikada, bazen 30 dakikada, bazen hiç olmuyor.
Neden Oluyor? (Otel Kartı Benzetmesi)
Düşün ki bir otele girdin ve resepsiyon sana 3 farklı oda kartı verdi:
Kart 1
"101 numaralı oda"
Kart 2
"102 numaralı oda"
Kart 3
"103 numaralı oda"
Asansöre bindiğinde hangi kartı okutacaksın? Bazen 101'i okutuyorsun açılıyor, bazen 102'yi okutuyorsun "yetkisiz giriş" diyor.
Sistemde Olan Tam Olarak Bu:
Kullanıcıların tarayıcısında 3 farklı "oturum kartı" (cookie) birikmiş:
tenant_1001_session
- Yeni sistem veriyor
laravel_session_1001
- Eski sistem veriyor
muzibu_session
- Aylar öncesinden kalmış
Neden AI Browser Test'inde Çıkmadı?
AI Browser Agent temiz bir tarayıcı ile test etti - hiç eski cookie yoktu. Her şey sıfırdan başladı.
Ama gerçek kullanıcılar haftalardır/aylardır siteyi kullanıyor, eski cookie'ler tarayıcılarında birikmiş durumda.
Teknik Detaylar
(Geliştiriciler İçin)Kanıt 1: Laravel Log'larından Cookie Listesi
storage/logs/laravel.log - SpeedTest endpoint'inden toplanan veriler
"muzibu_session", // ❌ Çok eski - hâlâ var!
"tenant_1001_session", // ✓ Yeni
"laravel_session_1001" // ❌ Eski - çakışıyor!
]
SONUÇ: Kullanıcının tarayıcısında 3 farklı session cookie var. Laravel hangisini okuyacağını karıştırıyor.
Kanıt 2: Cookie Domain Tutarsızlığı
curl -I https://www.muzibu.com/login çıktısı
Mevcut Durum
Cookie Domain:
www.muzibu.com
Sadece www.muzibu.com'da çalışır
Olması Gereken
Cookie Domain:
.muzibu.com
Tüm subdomain'lerde çalışır (leading dot)
Kanıt 3: Eksik Cookie Temizleme Listesi
app/Http/Middleware/SetTenantSessionConfig.php - Satır 129
Mevcut Kod
$possibleOldCookies = [
'muzibu_session',
'laravel_session'
];
⚠️ laravel_session_1001 LİSTEDE YOK!
Olması Gereken
$possibleOldCookies = [
'muzibu_session',
'laravel_session',
'laravel_session_1001', // ← EKSİK!
'laravel_session_1',
'PHPSESSID'
];
Kanıt 4: Redis Session Prefix Çalışmıyor
redis-cli KEYS "*session*" çıktısı
Mevcut Format
session_32cJXToB...
session_zp25zPCO...
session_I9j0CohQ...
Olması Gereken Format
tenant_1001_session_32cJX...
tenant_1001_session_zp25z...
tenant_1001_session_I9j0C...
TenancyServiceProvider'daki session prefix ayarı (satır 133-136) çalışmıyor.
Sorunun Akış Diyagramı
Kullanıcı Giriş Yapıyor
Login Controller devreye giriyor
Login Controller Cookie Set Ediyor
Cookie: laravel_session_1001
Domain: www.muzibu.com
SetTenantSessionConfig Cookie Set Ediyor
Cookie: tenant_1001_session
Domain: .muzibu.com
ÇAKIŞMA!
Kullanıcı tarayıcısında 2 cookie var:
laravel_session_1001
+
tenant_1001_session
Sonraki Request
Tarayıcı hangisini gönderecek? → RASTGELE!
laravel_session_1001 Gönderildi
Sunucu: "Bu session ID Redis'te yok veya farklı bir key'de"
→ 419 HATA / LOGOUT
tenant_1001_session Gönderildi
Sunucu: "Session bulundu, kullanıcı doğrulandı"
→ OK, DEVAM
Etkilenen Dosyalar
| Dosya | Sorun | Satır | Öncelik |
|---|---|---|---|
app/Http/Middleware/SetTenantSessionConfig.php
|
laravel_session_1001 expire listesinde yok | 129 | Kritik |
bootstrap/app.php
|
Middleware priority sıralaması | 68-71 | Yüksek |
app/Providers/TenancyServiceProvider.php
|
Redis session prefix çalışmıyor | 133-136 | Orta |
config/session.php
|
Cookie adı dinamik hesaplanıyor | 128-131 | Orta |
Sistem Metrikleri
Çözüm Planı
Gece UygulanacakGüvenli Çözüm Garantisi
Bu plan mevcut kullanıcıları ASLA çıkış yaptırmaz. Eski cookie'ler yavaşça temizlenecek, yeni cookie'ler düzgün çalışacak.
Eski Cookie Temizleme Listesini Güncelle
KRİTİK DÜŞÜK RİSK
Dosya: app/Http/Middleware/SetTenantSessionConfig.php - Satır 129
Ne yapacak: Her request'te eski cookie'leri expire edecek. Kullanıcılar birkaç gün içinde temizlenecek.
Middleware Priority Sıralamasını Düzelt
YÜKSEK ORTA RİSK
Dosya: bootstrap/app.php - Satır 68-71
Ne yapacak: Cookie config'i session başlamadan ÖNCE ayarlanacak.
Cookie Domain'i www İçin de Expire Et
ORTA DÜŞÜK RİSK
Dosya: app/Http/Middleware/SetTenantSessionConfig.php - Satır 136-146
Ne yapacak: Tüm domain varyasyonlarındaki eski cookie'leri temizleyecek.
Uygulama Sonrası Test Planı
- 1. Tarayıcıda tüm cookie'leri sil, yeni login yap
-
2.
Cookie'leri kontrol et: sadece
tenant_1001_sessionolmalı -
3.
Cookie domain'i kontrol et:
.muzibu.comolmalı - 4. 5 dakika bekle, sayfa yenile - session korunmalı
- 5. Farklı sayfalara git - session korunmalı