Bir gün, uzun bir süredir üzerinde çalıştığınız projede bir kullanıcı bir sayfada uzun süre kaldı ve hiç bir işlem yapmadan arka planda sessizce zaman geçirdi. Ama ne oldu? O sayfada başka bir kullanıcı bir işlem yapmaya çalıştığında, eski kullanıcı hala açık olan oturum yüzünden engellendi. İşte burada devreye "session timeout" (oturum zaman aşımı) giriyor.
Oturum Nedir ve Neden Zaman Aşımı?
Web sitenizde, kullanıcıların sisteme giriş yapabilmesi için bir oturum açması gerekir. Bu oturum, genellikle bir "session" (PHP'de oturum) aracılığıyla yönetilir. Ancak, bir kullanıcının oturumu güncellenmediğinde veya belirli bir süre boyunca aktif olmadığında, bu oturumun otomatik olarak sona ermesini istemeniz oldukça mantıklı bir güvenlik önlemidir. Aksi halde, sistemdeki açık oturumlar tehlikeli bir durum yaratabilir.
PHP’de session, bir kullanıcının tarayıcısında sunucuyla iletişimde olduğu süre boyunca bir kimlik bilgisi saklar. Bu bilgilerin zamanla eski veya geçersiz hale gelmesi, bazen güvenlik riskleri oluşturabilir. Burada devreye giren "session timeout" özelliği, kullanıcı etkileşimi olmayan bir süre sonunda oturumu sonlandırarak bu riskleri minimize eder.
PHP ile Session Timeout Nasıl Ayarlanır?
Şimdi PHP’de oturum zaman aşımını nasıl ayarlayabileceğimize bakalım. Her şeyden önce, PHP'nin session yönetiminde zaman aşımını kontrol etmek için `session.gc_maxlifetime` gibi bir yapılandırma parametresini kullanabiliriz. Ancak bu, genel ayarları ifade eder. Biz daha spesifik bir çözüm için oturum sürelerini yönetmek isteyebiliriz.
Aşağıdaki adımlar, oturum zaman aşımını kontrol etmek için en basit ve etkili yol olacaktır:
# 1. PHP Oturumu Başlatma
İlk adım, her sayfada `session_start()` komutunu kullanarak bir oturum başlatmaktır. Bu, kullanıcının tarayıcısında bir oturum başlatır ve bu oturum üzerinden kullanıcı bilgileri saklanabilir.
```php
session_start();
?>
```
# 2. Oturum Süresi Kontrolü
Şimdi, oturumun süresini kontrol etmek için bir değişken tanımlayacağız. Eğer kullanıcının aktif olmadığı süreyi belirli bir süreyi aşarsa, oturum sonlandırılacak ve kullanıcıya yeniden giriş yapması istenecek.
Örnek olarak, oturum süresinin 15 dakika olduğunu varsayalım:
```php
session_start();
// Oturum süresi
$session_lifetime = 900; // 900 saniye = 15 dakika
// Eğer kullanıcı uzun süre işlem yapmadıysa, oturum zaman aşımına uğrayacak
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY']) > $session_lifetime) {
session_unset(); // Oturumu temizle
session_destroy(); // Oturumu sonlandır
header("Location: login.php"); // Kullanıcıyı login sayfasına yönlendir
exit();
}
// Son işlem zamanını güncelle
$_SESSION['LAST_ACTIVITY'] = time();
?>
```
Yukarıdaki kodda, oturum süresi 15 dakikadır. Eğer kullanıcı 15 dakika boyunca herhangi bir işlem yapmazsa, oturum sonlandırılır ve kullanıcı giriş sayfasına yönlendirilir.
# 3. Oturumun Süresiz Olması Durumu
Tabii ki, bazı durumlarda oturum süresiz olmalı veya daha uzun süreli olmalı. Bu gibi durumlar için kullanıcıya zaman aşımı uyarıları gösterebiliriz. Örneğin, bir işlem yapılmadığında kullanıcıya küçük bir uyarı mesajı göstermek, oturum açma süresi yaklaşırken hatırlatmalar yapmak iyi bir kullanıcı deneyimi sağlar.
```php
// Uyarı süresi
$warning_time = 840; // 840 saniye = 14 dakika
// Uyarı gösterme
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY']) > $warning_time) {
echo "";
}
?>
```
Bu kod, kullanıcı 14 dakika boyunca herhangi bir işlem yapmadığında, ekranda bir uyarı gösterir.
Güvenliği Artırmak İçin Oturum Yönetimi
PHP oturumları güvenlik açısından son derece önemlidir. Oturum zaman aşımını doğru bir şekilde ayarlayarak, kullanıcı güvenliğini artırabiliriz. Özellikle oturum çalma ve oturum hırsızlığı gibi güvenlik tehditlerine karşı bu tür önlemler almak oldukça önemlidir.
Bunun dışında, oturum çalma riskini azaltmak için HTTPS protokolü kullanmalı, oturum çerezlerini `secure` ve `httponly` özellikleriyle ayarlamalısınız. Bu da, oturum çerezlerinin sadece güvenli bağlantılar üzerinden gönderilmesini ve sadece sunucu tarafından erişilmesini sağlar.
```php
// Oturum çerezlerini güvenli hale getirme
ini_set('session.cookie_secure', 1); // Sadece HTTPS üzerinden çerez gönder
ini_set('session.cookie_httponly', 1); // JavaScript ile erişilemez
?>
```
Sonuç
PHP ile session timeout yönetimi, hem kullanıcı deneyimini iyileştirir hem de güvenlik sağlamak adına çok önemlidir. Kullanıcılarınızın uzun süre aktif olmayan oturumlarını sonlandırmak, oturum çalma gibi kötü niyetli saldırılara karşı önlem almanıza yardımcı olur. Bu yazıda verdiğimiz örneklerle, PHP'deki oturumları güvenli bir şekilde yönetebilir ve projenizi daha sağlam bir temele oturtabilirsiniz.