PHP Session (Oturum Yönetimi): Güvenli ve Etkili Kullanım Rehberi
🔐 PHP Session (Oturum Yönetimi): Güvenli ve Etkili Kullanım Rehberi
Modern web uygulamalarında kullanıcıların oturum bilgilerini yönetmek, güvenli bir deneyim için çok önemlidir.
PHP, bu süreci kolaylaştıran yerleşik bir mekanizma sunar: Session (oturum).
Bu yazıda PHP Session’ların ne olduğunu, nasıl çalıştığını, nasıl kullanıldığını ve güvenli oturum yönetimi ipuçlarını adım adım öğreneceksiniz. 🚀
🔹 1. PHP Session Nedir?
Session (oturum), bir kullanıcının web sitesinde gezinirken kim olduğunu tanımamızı sağlayan sunucu taraflı bir veri saklama yöntemidir.
🍪 Cookie vs Session
Çerezler (cookie) tarayıcıda saklanır, oturumlar ise sunucuda saklanır.
Tarayıcı yalnızca bir oturum kimliği (session ID) taşır.
💡 Kısacası: Cookie istemci tarafında, Session sunucu tarafında saklanır.
🔸 2. PHP Session Nasıl Başlatılır?
PHP’de oturum başlatmak için session_start() fonksiyonu kullanılır.
Bu fonksiyon, sayfanın en üstünde yer almalıdır.
Burada "kullanici" adlı bir oturum değişkeni oluşturduk.
Bu bilgi, sunucuda saklanır ve kullanıcı tarayıcısını kapatana kadar veya oturum süresi dolana kadar geçerli olur.
🔹 3. PHP Session Verilerine Erişim
Oturum değişkenlerine $_SESSION süper global dizisi üzerinden erişilir.
🔸 4. PHP Session Güncelleme ve Silme
Oturum Değerini Güncelleme:
Tek Bir Değeri Silme:
Tüm Oturumu Sonlandırma:
Not:
session_destroy()oturum verisini siler ancak tarayıcıdaki oturum kimliği (PHPSESSID) hemen kaybolmaz. Genellikle sayfa yenilendiğinde etkili olur.
🔹 5. Session ID (Oturum Kimliği)
PHP her oturuma benzersiz bir kimlik verir.
Bu kimlik çerez olarak tarayıcıya gönderilir.
Session ID, sunucudaki oturum verisini eşleştirmemizi sağlar.
Yani kullanıcı farklı sayfalarda gezinse bile aynı kimlikle tanınır.
🔸 6. Session Süresi (Timeout)
Varsayılan olarak PHP oturumları belirli bir süre sonra sona erer.
Bu süreyi değiştirmek için php.ini veya ini_set() kullanılabilir.
💡 Bazı barındırma servisleri bu ayarı değiştirmeye izin vermeyebilir.
Bu durumda PHP seviyesinde “aktiflik kontrolü” uygulayabilirsiniz.
🔹 7. Kullanıcı Girişi (Login) Örneği
profil.php dosyasında:
🔸 8. Session Güvenliği
Oturum yönetimi güvenli değilse, Session Hijacking (Oturum Çalma) gibi saldırılara açık hale gelir.
Bu riskleri azaltmak için şu önlemleri alın:
✅ Güvenli Oturum Yönetimi İpuçları:
-
HTTPS kullanın:
Oturum kimliklerinin şifrelenmemiş bağlantılarda ele geçirilmesini engeller. -
session_regenerate_id():
Giriş yaptıktan sonra yeni bir session ID oluşturur, çalma riskini azaltır. -
httponly & secure cookie ayarlarını kullanın:
PHP’nin session cookie’sini bu parametrelerle güçlendirin. -
Oturum süresini sınırlandırın:
Uzun süreli açık oturumlar güvenlik riskini artırır. -
Çıkış (logout) işlemini düzgün yönetin:
session_unset()vesession_destroy()birlikte kullanılmalıdır.
🔹 9. Çok Sayfalı Oturum Yönetimi
Oturum verileri tüm sayfalarda geçerlidir.
Yani kullanıcı bir kez giriş yaptıktan sonra, farklı sayfalarda da oturum bilgisine erişebilirsiniz.
🔸 10. Session ile Kullanıcı Takibi (Ziyaret Sayacı)
🧠 11. Session ve Cookie Arasındaki Farklar
| Özellik | Session | Cookie |
|---|---|---|
| Saklandığı yer | Sunucuda | Tarayıcıda |
| Güvenlik | Yüksek | Düşük |
| Boyut sınırı | Yok (sunucuya bağlı) | Yaklaşık 4 KB |
| Kullanıcı tarafı erişimi | Hayır | Evet |
| Oturum süresi | Tarayıcı kapanana kadar veya belirlenen süre kadar | Belirtilen süre kadar |
🧩 12. En İyi Uygulamalar (Best Practices)
✅ Oturum başlatmayı sayfanın en üstünde yapın.
✅ Giriş yaptıktan sonra session_regenerate_id() çağırın.
✅ Çıkış işlemlerinde session_unset() + session_destroy() kullanın.
✅ Hassas verileri doğrudan session’da değil, veritabanında saklayın.
✅ Session verilerini düzenli olarak temizleyin.
🏁 Sonuç
PHP session yapısı, kullanıcı kimliğini doğrulamak ve kişisel deneyim sağlamak için temel araçlardan biridir.
Cookie’lerden daha güvenli olan bu yapı, doğru kullanıldığında güçlü bir oturum yönetimi sağlar.
Unutmayın: Güvenli bir oturum yönetimi, sadece kullanıcı deneyimini değil, uygulamanızın bütün güvenliğini etkiler. 🔒💻


