<?php
// Dikkat: Bu kod tamamen çalışır durumda değildir, sadece bir örnektir!
// my_session_start() ve my_session_regenerate_id() tutarsız ağda
// oturum kaybını önler. Ek olarak bu kod, çalınan oturumun saldırganlar
// tarafından suistimal edilmesini engelleyebilir.
function my_session_start() {
session_start();
if (isset($_SESSION['destroyed'])) {
if ($_SESSION['destroyed'] < time()-300) {
// Normalde olmamalı. Saldırı veya kararsız ağ nedeniyle olabilir.
// Bu kullanıcı oturumunun tüm kimlik kanıtlama bilgilerini sil.
remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);
throw(new DestroyedSessionAccessException);
}
if (isset($_SESSION['new_session_id'])) {
// Süre henüz dolmadı. Kararsız ağda çerez kaybı olabilirdi.
// Uygun oturum kimliği çerezini yeniden tanımlamayı dene.
// Dikkat: Kimlik kanıtlama bilgilerini silmek için
// oturum kimliğini yeniden atamaya çalışma!
session_commit();
session_id($_SESSION['new_session_id']);
// Yeni oturum kimliği etkinleşmeli
session_start();
return;
}
}
}
function my_session_regenerate_id() {
// Tutarsız ağdan dolayı oturum kimliği atanamadığında
// doğru oturum kimliğini tanımlamak için yeni oturum kimliği gerekir.
$new_session_id = session_create_id();
$_SESSION['new_session_id'] = $new_session_id;
// Silinme zamanı damgasını tanımla
$_SESSION['destroyed'] = time();
// geçerli oturuma yaz ve kapat;
session_commit();
// Oturumu yeni oturum kimliği ile başlat
session_id($new_session_id);
ini_set('session.use_strict_mode', 0);
session_start();
ini_set('session.use_strict_mode', 1);
// Yeni oturumun bunlara ihtiyacı yok
unset($_SESSION['destroyed']);
unset($_SESSION['new_session_id']);
}
?>