PHP session, bir kullanıcının tarayıcıdan sunucuya gönderdiği benzersiz bir kimlik ile oturum bilgilerini saklayan sunucu taraflı bir mekanizmadır. Tarayıcı, session id'yi genellikle bir cookie olarak tutar, fakat bu id, sunucu tarafında saklanan veriyle eşleştirilir. Böylece kullanıcı, sayfalar arası gezinirken aynı oturumda kalır ve veriler korunur.
Cookie ile Session Farkları
Cookie'ler tarayıcıda saklanırken, session verileri sunucuda tutulur. Cookie'ler tarayıcıdan erişilebilir olduğundan güvenlik riskleri taşır; session id ise sunucu tarafında saklandığı için daha güvenli kabul edilir. Bununla birlikte, session verileri tarayıcıda saklanmadığından kullanıcıya görünmez ve doğrudan müdahale edilemez. Cookie'ler ise genellikle kalıcı verileri saklamak için kullanılır.
Session Başlatma ve Kullanımı
Bir session başlatmak için session_start() fonksiyonu çağrılır. Bu fonksiyon, tarayıcıdan gelen session id'yi kontrol eder; yoksa yeni bir id oluşturur. Örnek kod:
session_start();
$_SESSION['kullanici_id'] = 42;
$_SESSION['isim'] = 'Ayşe';Bu veriler, kullanıcı oturumu süresince sunucu tarafında saklanır ve $_SESSION süper globali ile erişilebilir.
Cookie Oluşturma ve Okuma
Cookie oluşturmak için setcookie() fonksiyonu kullanılır. Örneğin, kullanıcı tercihlerini saklamak için:
setcookie('tema', 'koyu', time() + 3600*24*30, '/');Cookie'yi okumak için $_COOKIE süper globali kullanılır:
$tema = $_COOKIE['tema'] ?? 'açık';Güvenlik Açıkları ve Önlemler
Session hijacking, XSS ve CSRF gibi saldırılar, session id'nin çalınmasıyla gerçekleşir. Bu riskleri azaltmak için:
- HTTPS kullanmak;
- Session id'yi
session_regenerate_id()ile periyodik olarak yenilemek; - Cookie'leri
HttpOnlyveSecureözniteliklerini ayarlamak; - Session timeout süresini kısıtlamak;
- CSRF tokenleri ile formları korumak;
Cookie ve Session ile Kullanıcı Takibi
Analitik ve kişiselleştirme için kullanıcı davranışlarını takip edebilirsiniz. Session, oturum süresince geçici verileri saklamak için idealdir; cookie ise kalıcı tercihleri tutar. Örneğin, sepet içeriğini session ile tutabilir, dil tercihini cookie ile saklayabilirsiniz.
Performans ve Ölçeklenebilirlik
Session verileri sunucu belleğinde saklandığında, yüksek trafikli sitelerde bellek tüketimi artar. Çözüm olarak, session verilerini dosya sisteminde, veritabanında veya dağıtılmış cache (Redis, Memcached) üzerinde depolamak mümkündür. session_set_save_handler() ile özelleştirilmiş session saklama mekanizmaları oluşturabilirsiniz.
Özet
PHP session, kullanıcı oturumlarını güvenli ve etkili bir şekilde yönetir. Cookie'ler ise kalıcı verileri saklamak için kullanılır. Her iki teknolojinin de avantajları ve riskleri vardır; doğru yapılandırma ve güvenlik önlemleri ile güvenli bir web uygulaması geliştirmek mümkündür.