(PHP 4 >= 4.3.2, PHP 5, PHP 7, PHP 8)
session_regenerate_id — Geçerli oturum kimliğini yenisiyle değiştirir
session_regenerate_id() işlevi geçerli oturum kimliğini yenisiyle değiştirirken oturum bigisini korur.
session.use_trans_sid etkin olduğunda, çıktı session_regenerate_id() çağrısından sonra başlatılmalıdır. Aksi takdirde, eski oturum kimliği kullanılır.
Şu an için, işlev Mobil veya WiFi ağları gibi dengesiz ağlarda düzgün çalışmamaktadır. Bu bakımdan, işlev böyle ağlarda çağrıldığında bir oturum kaybı yaşanabilir.
Eski oturum verisini değil, eski oturumun zaman damgasını hemen yok etmeli ve eski oturum kimliğine erişimi denetlemelisiniz. Aksi takdirde, sayfaya eşzamanlı erişimler tutarsız bir duruma veya oturum kaybına yol açabilir. Ya da, istemcinin (tarayıcı) yarış durumu yan etkisi nedeniyle, gereksiz yere çok sayıda boş oturum kimliği çerezi oluşturmasına sebep olabilir. Eski oturum verisinin hemen silinmesi ayrıca oturum ele geçirme saldırısını algılamayı ve önlemeyi devre dışı bırakır.
eski_oturumu_sil
true
ise eski oturum verisi silinir. Yarış durumlarından kaçınmak ve oturum ele geçirme saldırılarını algılamak/önlemek için eski oturum hemen silinmemelidir.
Örnek 1 - session_regenerate_id() örneği
<?php
// Dikkat: Bu kod tamamen çalışır durumda değildir, sadece bir örnektir!
session_start();
// Zaman damgası yok edilmiş mi?
if (isset($_SESSION['destroyed'])
&& $_SESSION['destroyed'] < time() - 300) {
// Normalde olmamalı. Saldırı veya kararsız ağ nedeniyle olabilir.
Geçerli oturum modülü tutarsız ağda iyi çalışmaz. İşlevin oturumu kaybetmesinden kaçınmak için oturum kimliği yönetilmelidir.
Örnek 2 - session_regenerate_id() ile oturum kaybını önlemek
<?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.