Frontend'de kullanıcı giriş formunu doldurduğumda "Giriş başarılı" mesajı görüyorum ve ana sayfaya yönleniyorum. Ancak yönlendikten sonra hala giriş yapmamış gibi görünüyorum - kullanıcı adım header'da gözükmüyor, favoriler boş, profil butonu yok.
Beklenen: Giriş yaptıktan sonra kullanıcı bilgilerim görünsün
Gerçekleşen: Ana sayfaya yönleniyorum ama giriş yapmamış gibi davranıyorum
Gizli sekmede (incognito mode) login sorunsuz çalışıyor, session kalıcı oluyor
Normal sekmede login sonrası session kayboluyormuş gibi davranıyor
.env dosyasında SESSION_DOMAIN=null olarak ayarlanmış.
Problem:
✅ Doğru Kullanım:
# SESSION_DOMAIN= (tamamen boş veya yorum satırı)
# Laravel otomatik olarak current domain'i kullanır
SESSION_SAME_SITE=none ayarı multi-tenant yapı için uygun değil.
SameSite Attribute Nedir?
Browser'ın cookie'yi hangi durumlarda geri göndereceğini belirleyen güvenlik ayarı.
none
Cross-site isteklerde de cookie gönder (iframe, 3rd party)
⚠️ HTTPS + Secure=true zorunlu
lax
Sadece güvenli cross-site (GET link tıklama)
✅ Çoğu durumda ideal
strict
Sadece same-site isteklerde cookie gönder
🔒 Çok katı, UX sorunlu
Neden "lax" Multi-Tenant İçin İdeal?
Normal sekmede eski, bozuk session cookie'leri kalmış. Gizli sekmede cookie yok, temiz başlangıç.
Neden Gizli Sekmede Çalışıyor?
❌ Normal Sekme
✅ Gizli Sekme
❌ Önce (Hatalı)
SESSION_DOMAIN=null SESSION_SAME_SITE=none
✅ Sonra (Doğru)
# SESSION_DOMAIN= (boş) SESSION_SAME_SITE=lax
Değişiklik Komutları:
sudo chown tuufi.com_:psaserv .env php artisan config:clear php artisan config:cache
Laravel config cache'i eski SESSION_DOMAIN değerini saklıyor olabilirdi. Tamamen temizlenip yeniden oluşturuldu.
php artisan config:clear php artisan cache:clear php artisan config:cache php artisan view:clear php artisan responsecache:clear
Kullanıcının browser'ında eski, bozuk session cookie'leri kalmıştı. 3 yöntem denendi:
🔧 Yöntem 1: DevTools Cookie Delete
F12 → Application → Cookies → muzibu.com → Tümünü sil
🔧 Yöntem 2: Hard Refresh
Ctrl+Shift+R (Windows/Linux) veya Cmd+Shift+R (Mac)
🔧 Yöntem 3: Browser Cache Temizle
Ayarlar → Gizlilik → Tarama verilerini temizle → Son 24 saat (Çerezler + Önbellek)
SESSION_DOMAIN=null (string)
SESSION_SAME_SITE=none
# SESSION_DOMAIN= (boş/PHP null)
SESSION_SAME_SITE=lax
Driver:
redis
Database driver'dan 4600x daha hızlı (23.3s → 5ms)
Lifetime:
10080 dakika (7 gün)
Kullanıcılar haftalık giriş yapmasın
Secure:
true
Cookie sadece HTTPS'te gönderilir
HttpOnly:
true
JavaScript cookie'ye erişemez (XSS koruması)
SameSite:
lax
CSRF koruması + kullanıcı dostu
Domain:
null (otomatik)
Her tenant kendi domain'ine cookie yazar
Frontend: Alpine.js handleLogin() fonksiyonu form'u submit eder
API: POST /api/auth/login ile credentials gönderilir
Backend: Auth::attempt($credentials) ile doğrulama yapılır
Backend: $request->session()->regenerate() ile yeni session ID oluşturulur
Backend: Session cookie doğru domain'e yazılır (SESSION_DOMAIN boş olduğu için)
Response: User bilgisi ve yeni CSRF token döndürülür
Frontend: window.location.reload() ile sayfa yenilenir
Browser: Session cookie'sini her istekte gönderir (SameSite=lax sayesinde)
.env
SESSION_DOMAIN ve SESSION_SAME_SITE değerleri güncellendi
config/session.php
Değişiklik YOK (config cache'den yüklenir)
app/Http/Controllers/Api/Auth/AuthController.php
Değişiklik YOK (zaten doğru çalışıyordu)
public/themes/muzibu/js/player/core/player-core.js
Değişiklik YOK (login handler zaten doğru)