У меня есть сеанс PHP на моем веб-сайте, который я использую для хранения информации для входа. Основная структура массива такова:
$_SESSION = Array(
[uid]=>Int
[acc]=>Array
[lastAction]=>Timestamp
)
Когда я устанавливаю эти переменные сеанса в моем сценарии PHP входа в систему, я устанавливаю их так:
$_SESSION["uid"] = $uid;
$_SESSION["acc"] = array(...);
$_SESSION["lastAction"] = time();
Это никогда не создавало проблем, пока я не добрался до одного сценария позже, где я пошел связывать некоторые переменные, используя MySQLi. Я хотел получить uid
переменная из одной из моих таблиц, поэтому я пошел дальше и сделал это:
$stmt = $link->prepare("SELECT `uid` ... FROM ...");
...
$stmt->bind_result($uid, ...);
Оператор выполнялся без проблем, и все данные верны, но теперь есть проблема с сеансом.
По-видимому, $_SESSION["uid"]
все еще привязан к ссылке $uid
, хотя я сейчас на другой странице и я не передавал переменную по ссылке при настройке сеанса.
Чтобы проверить эту теорию, я снова установил сеанс и запустил этот код:
<?php
session_start();
$uid = 1823479;
print_r($_SESSION);
?>
Конечно же, $_SESSION["uid"]
равняется 1823479.
Это ожидаемое поведение? Я никогда раньше не сталкивался с этой проблемой, но так как я не устанавливал сеанс с использованием ссылок, на мой взгляд, это не ожидаемое поведение.
PHP Ver: 5.3
Используйте phpinfo (), чтобы проверить, установлено ли для register_globals значение «off». Похоже, это может быть установлено на «вкл», в этом случае $ _SESSION [«uid»] будет таким же, как $ uid.
В PHP, почему мои переменные сеанса сохраняются как ссылки?
http://bytes.com/topic/php/answers/759731-register_globals-off-session-side-effect
Других решений пока нет …