Чтобы session_encode
кодировал переменную как ссылку, указанная переменная также должна быть в сеансе.Если он не находится в сеансе, он закодирует его как исходный тип.
$foo = 'bar';
$_SESSION['foo'] = $foo;
$_SESSION['bar'] = &$_SESSION['foo'];
$_SESSION['baz'] = &$foo;
$_SESSION['hey'] = &$foo;
var_dump(session_encode());
Выходы:
foo|s:3:"bar";bar|R:1;baz|s:3:"bar";hey|R:2;
Как видите, foo
был сохранен как строка,bar
был сохранен как ссылка на foo
, но поскольку baz
ссылается на локальную переменную $foo
, которая может не существовать, когда сеанс декодируется в другом месте, PHP автоматически преобразует его в исходный тип строки.Однако hey
также является ссылкой на $foo
, но поскольку указанная переменная теперь хранится как baz
, PHP закодирует hey
как ссылку на baz
.