← Blog'a Don
PHP Dersleri

PHP Session (Oturum Yönetimi): Güvenli ve Etkili Kullanım Rehberi

5 ay once 5 ay once #105
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.

<?php session_start(); $_SESSION["kullanici"] = "Metin"; echo "Oturum başlatıldı!"; ?>

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.

<?php session_start(); echo "Hoş geldin, " . $_SESSION["kullanici"]; ?>

🔸 4. PHP Session Güncelleme ve Silme

Oturum Değerini Güncelleme:

$_SESSION["kullanici"] = "Admin";

Tek Bir Değeri Silme:

unset($_SESSION["kullanici"]);

Tüm Oturumu Sonlandırma:

session_destroy();

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.

<?php session_start(); echo session_id(); ?>

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.

<?php ini_set('session.gc_maxlifetime', 3600); // 1 saat session_start(); ?>

💡 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

<?php session_start(); if ($_POST["kullanici"] == "metin" && $_POST["sifre"] == "1234") { $_SESSION["giris"] = true; $_SESSION["ad"] = "Metin"; header("Location: profil.php"); } else { echo "Hatalı giriş!"; } ?>

profil.php dosyasında:

<?php session_start(); if (isset($_SESSION["giris"])) { echo "Hoş geldin, " . $_SESSION["ad"]; } else { header("Location: login.php"); } ?>

🔸 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ı:

  1. HTTPS kullanın:
    Oturum kimliklerinin şifrelenmemiş bağlantılarda ele geçirilmesini engeller.

  2. session_regenerate_id():
    Giriş yaptıktan sonra yeni bir session ID oluşturur, çalma riskini azaltır.

    session_regenerate_id(true);
  3. httponly & secure cookie ayarlarını kullanın:
    PHP’nin session cookie’sini bu parametrelerle güçlendirin.

    session_set_cookie_params([ 'lifetime' => 0, 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ]);
  4. Oturum süresini sınırlandırın:
    Uzun süreli açık oturumlar güvenlik riskini artırır.

  5. Çıkış (logout) işlemini düzgün yönetin:
    session_unset() ve session_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.

// sayfa1.php session_start(); $_SESSION["renk"] = "Mavi"; // sayfa2.php session_start(); echo $_SESSION["renk"]; // Mavi

🔸 10. Session ile Kullanıcı Takibi (Ziyaret Sayacı)

<?php session_start(); if (!isset($_SESSION["sayac"])) { $_SESSION["sayac"] = 1; } else { $_SESSION["sayac"]++; } echo "Bu sayfayı " . $_SESSION["sayac"] . " defa ziyaret ettiniz."; ?>

🧠 11. Session ve Cookie Arasındaki Farklar

ÖzellikSessionCookie
Saklandığı yerSunucudaTarayıcıda
GüvenlikYüksekDüşük
Boyut sınırıYok (sunucuya bağlı)Yaklaşık 4 KB
Kullanıcı tarafı erişimiHayırEvet
Oturum süresiTarayıcı kapanana kadar veya belirlenen süre kadarBelirtilen 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. 🔒💻