PHP ile Oturum Zaman Aşımı (Session Timeout) Yönetimi

PHP ile session timeout yönetimini detaylı bir şekilde ele alarak, oturum süresi aşımı sonrası oturum sonlandırma yöntemlerini açıkladık. Bu adımlarla web uygulamalarınızda güvenliği artırabilirsiniz.

BFS

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.

İlgili Yazılar

Benzer konularda diğer yazılarımız

ASP.NET Core ile Mobil Uygulama Geliştirme: Cross-Platform Web ve Mobil Uygulama Birleştirme

Günümüzde mobil uygulamalar hayatımızın ayrılmaz bir parçası haline geldi. Akıllı telefonlarımızda geçirdiğimiz zamanın büyük bir kısmını mobil uygulamalar sayesinde geçiriyoruz. Peki, bir mobil uygulama geliştirirken karşılaştığımız zorlukları nasıl...

ASP.NET Core 500 Internal Server Error: Sebepleri ve Çözümleri

Bir web geliştiricisi olarak, karşılaştığınız en zorlayıcı hatalardan biri şüphesiz "500 Internal Server Error"dır. Bu hata, web uygulamanızda her şeyin yolunda gittiğini düşündüğünüz bir anda karşınıza çıkabilir ve tüm projeyi durdurabilir. Ancak merak...

OAuth2 Authentication Error: Nedenleri ve Çözümleri

OAuth2 Authentication Error: Gerçekten Neyin Peşindeyiz?Her geliştirici, kimlik doğrulama hatalarıyla bir noktada karşılaşmıştır. Ama bazen işler kontrolden çıkabiliyor. Eğer bir gün OAuth2 ile çalışırken bir kimlik doğrulama hatası aldığınızda, yalnız...