PHP, neden benim oturum değişkenleri referans olarak kalıcı olan?

0 Cevap php

İşte kod. Bu bir oturum kimliği IP adresini doğrulayarak Kandırılmaktan olmadığını kontrol etmek için basit bir operasyon var:

session_start();
$session_ip_address = $_SERVER['REMOTE_ADDR'];
if((!isset($_SESSION['SESSION_IP_ADDRESS'])) || !$_SESSION['SESSION_IP_ADDRESS']) {
    $_SESSION['SESSION_IP_ADDRESS'] = $session_ip_address;
}


if($_SESSION['SESSION_IP_ADDRESS'] != $_SERVER['REMOTE_ADDR']) {
    session_destroy();
    $_SESSION['security_error'] = true;
}

Ben hemen sonra session_start() ve yine senaryonun sonunda var_dump($_SESSION) eklerseniz, o zaman ilk kez (bir oturum çerezi set vermeden) kod çalıştırmak görüyorum ki ilk dizi boştur, o benim IP adresi anahtar 'SESSION_IP_ADDRESS' olarak atamış. Şimdiye kadar, çok iyi. Ben yine kodu çalıştırdığınızda Ama, şimdi 'SESSION_IP_ADDRESS' a reference hemen oturum başladıktan sonra (ben dizeye önüne ampersanı söyleyebilirim) olarak depolanır olduğunu göstermektedir. Ben bunu bir üçüncü kez çalıştırdığınızda, ben 'SESSION_IP_ADDRESS geç' ('SESSION_IP_ADDRESS' => &null) hemen oturum başlatıldıktan sonra bir null başvuru olduğunu görüyoruz. Neler oluyor?!

Yinelemek, bu çıkış ilk kez:

array(0) {
}
array(1) {
  ["SESSION_IP_ADDRESS"]=>
  string(11) "xx.xx.xxx.x"
} 

Bu ikinci kez çıktı:

array(1) {
  ["SESSION_IP_ADDRESS"]=>
  &string(11) "xx.xx.xxx.x"
}
array(1) {
  ["SESSION_IP_ADDRESS"]=>
  &string(11) "xx.xx.xxx.x"
}

Ve üçüncü kez ve daha sonra her zaman üzerinde:

array(1) {
  ["SESSION_IP_ADDRESS"]=>
  &NULL
}
array(1) {
  ["SESSION_IP_ADDRESS"]=>
  &string(11) "xx.xx.xxx.x"
}

0 Cevap