Кажется, что переменные сеанса не сохраняются

Достаточно простой код:

<? 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, т. Е. Они не могут начинаться с числа и должны начинаться с буквы или подчеркивания. Подробнее см. Раздел о переменных в этом руководстве.

http://php.net/manual/en/session.examples.basic.php

При запуске error_reporting вверх, вы должны заметить это:

Обратите внимание на <файл>, строка …: session_write_close() : прокручивание числового ключа 1330967020

Числовые индексы для переменных сеанса не поддерживаются .

Это не странно . Он просто пропускает числовые клавиши. Вы можете увидеть эту ошибку, если вы включили уведомление для отображения.

Как упоминалось в этом комментарии на php.net. Вы не должны использовать числовые клавиши для определения значений в сеансе.

котировка

Не пытайтесь использовать целое число как ключ к массиву $ _SESSION (например, $ _SESSION [0] = 1;), или вы получите сообщение об ошибке «Примечание: Неизвестно: Пропуск числового ключа 0. в Unknown on line 0»