Kaybolan bir oturum, giriş sorunu gibi görünür ve neredeyse hiç öyle değildir. Giriş işe yaramıştır; yitip giden şey, bir istekle bir sonraki arasında kaybolan giriş kanıtıdır.
1. Bir şey oturum dosyalarını temizliyor
Debian ve Ubuntu'da bir zamanlayıcı, PHP oturum dosyalarını kendi takvimine göre süpürür ve bunu, sayfanızın ini_set ile koyduğu değere değil, DAĞITIMIN ömür anlayışına göre yapar. gc_maxlifetime'ı çalışma anında yükselten bir sayfa, o süpürme hakkında hiçbir şeyi değiştirmez.
systemctl list-timers | grep phpsessionclean
php -i | grep -E "session.save_path|session.gc_maxlifetime"
Çaresi, süpürücünün dokunmadığı, size ait bir oturum dizinidir; ömrü de çalışma anında değil havuz yapılandırmasında ayarlanır.
php_admin_value[session.save_path] = /var/lib/php/sessions-mysite
php_admin_value[session.gc_maxlifetime] = 86400
2. Çerez geri gelmiyor
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = Lax
3. İki sunucu, tek oturum
Bir yük dengeleyicinin arkasında birinci istek A sunucusuna iner ve oraya bir oturum dosyası yazar; ikinci istek B'ye iner, orada öyle bir dosya yoktur. Kullanıcı rastgele dışarı atılır; bu da yeniden üretmesi en zor hâlidir.
- Oturumlar Redis'te ya da veritabanında, ikisinin ortak kullanımında.
- Ya da dengeleyicide yapışkan oturumlar: işe yarar, ama bir sunucunun değiştirilmesinden sağ çıkmaz.
Olurken izleyin
ls -la /var/lib/php/sessions/ | head
# log in, then look again: your file should be there and should stay