En PHP, ¿por qué las variables de mi sesión persisten como referencias?

Aquí está el código. Es una operación simple verificar que una ID de sesión no se esté falsificando verificando la dirección IP:

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;
}

Si insertovar_dump($_SESSION) justo después desession_start() y nuevamente al final del script, la primera vez que ejecuto el código (sin un conjunto de cookies de sesión) veo que al principio la matriz está vacía, luego tiene mi dirección IP asignada a la clave 'SESSION_IP_ADDRESS'. Hasta aquí todo bien. Pero cuando vuelvo a ejecutar el código, ahora muestra que 'SESSION_IP_ADDRESS' se almacena como unreferencia Inmediatamente después de que comience la sesión (puedo decir por el ampersand prepended a la cadena). Cuando lo ejecuto por tercera vez, veo que 'SESSION_IP_ADDRESS' ahora es una referencia nula ('SESSION_IP_ADDRESS' => &null) inmediatamente después de que comience la sesión. ¡¿Que esta pasando?!

Para reiterar, esta es la salida la primera vez:

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

Esta es la salida la segunda vez:

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

Y la tercera vez y cada vez a partir de entonces:

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta