#php #session #php-7
#php #сессия #php-7
Вопрос:
Я обновляюсь с PHP 5.6 до PHP 7, и возникла странная проблема.
<?php
session_start();
$_SESSION['test'] = true;
$var = $_SESSION;
session_unset();
print_r($var);
PHP 5.6
Вывод:
Array
(
[test] => 1
)
PHP 7
Вывод:
Array
(
)
Я предполагаю, что это происходит потому $_SESSION
, что передается по ссылке, но почему?
Комментарии:
1. MCVE: 3v4l.org/Lg0IE
2. измените на:
$var = amp;$_SESSION;
чтобы получить одинаковое поведение во всех версиях PHP. Я подозреваю, что вы встречали «копировать при записи» с более ранней версией PHP. 3v4l.org/vv9PU3. Похоже на ошибку, пожалуйста, сообщите о bugs.php.net .
4. обходной путь:
$var = array_merge(array(), $_SESSION);
. Я протестировал его с обычными массивами, и он работает нормально. т.е. «копировать при записи». Это простоsession_unset();
ошибка. ;- Версия/ Array_merge: 3v4l.org/ve3035. Исправлено вверх по течению, ссылка bugs.php.net/bug.php?id=73273 и github.com/php/php-src/commit /. …
Ответ №1:
В заключение, это была ошибка, которая теперь исправлена, начиная с PHP 7.0.13. Подробности в комментариях к вопросу.