Достаточно простой код:
<? session_start(); $_SESSION['t'.time()] = "ok"; echo "<pre>".print_r($_SESSION, 1)."</pre>"; ?>
показывает, как и ожидалось, что-то вроде
Array ( [t1330966834] => ok [t1330966835] => ok [t1330966836] => ok )
после перезагрузки 3 страницы.
Давайте изменим несколько символов:
$_SESSION[time()] = "ok";
(теперь без «t»), и я ожидаю, что после нескольких перезагрузок что-то вроде
Array ( [t1330966834] => ok [t1330966835] => ok [t1330966836] => ok [1330967020] => ok [1330967021] => ok [1330967022] => ok [1330967023] => ok )
Но на самом деле результат совершенно другой:
Array ( [t1330966834] => ok [t1330966835] => ok [t1330966836] => ok [1330967020] => ok )
У нас есть 3 предыдущих ячейки массива ad one и только одна ячейка времени, независимо от того, сколько раз вы перезагружаете страницу. Время правильное, оно разное каждую секунду, но только одна ячейка без 't'! Также я попробовал
$t =time(); $_SESSION[$t] = "ok";
и даже
$t =intval(time()); $_SESSION[$t] = "ok";
Но это остается только одной ячейкой со временем.
Протестировано на php 5.2.13 и 5.3.10 на двух разных серверах. Что я делаю не так?
Ключи в ассоциативном массиве
$_SESSION
имеют те же ограничения, что и обычные имена переменных в PHP, т. Е. Они не могут начинаться с числа и должны начинаться с буквы или подчеркивания. Подробнее см. Раздел о переменных в этом руководстве.
При запуске error_reporting вверх, вы должны заметить это:
Обратите внимание на <файл>, строка …:
session_write_close()
: прокручивание числового ключа 1330967020
Числовые индексы для переменных сеанса не поддерживаются .
Это не странно . Он просто пропускает числовые клавиши. Вы можете увидеть эту ошибку, если вы включили уведомление для отображения.
Как упоминалось в этом комментарии на php.net. Вы не должны использовать числовые клавиши для определения значений в сеансе.
котировка
Не пытайтесь использовать целое число как ключ к массиву $ _SESSION (например, $ _SESSION [0] = 1;), или вы получите сообщение об ошибке «Примечание: Неизвестно: Пропуск числового ключа 0. в Unknown on line 0»