Кажется, переменные сеанса не сохраняются - PullRequest
7 голосов
/ 05 марта 2012

Довольно простой код:

<code><?
session_start();
$_SESSION['t'.time()]     = "ok";
echo "<pre>".print_r($_SESSION, 1)."
";?>

показывает, как и ожидалось, что-то вроде

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 предыдущих элемента массива и одна и только одна «временная» ячейка - независимо от того, сколько раз вы перезагружаете страницу. Время правильное, оно отличается каждую секунду, но только одна ячейка без 't'! Также я пробовал

$t =time();
$_SESSION[$t]     = "ok";

и даже

$t =intval(time());
$_SESSION[$t]     = "ok";

Но со временем остается только одна клетка.

Протестировано на php 5.2.13 и 5.3.10на 2 разных серверах. Что я делаю не так?

Ответы [ 3 ]

6 голосов
/ 05 марта 2012

На ключи в ассоциативном массиве $_SESSION распространяются те же ограничения, что и на имена обычных переменных в PHP, то есть они не могут начинаться с цифры и должны начинаться с буквы или подчеркивания. Для получения более подробной информации см. Раздел о переменных в этом руководстве.

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

5 голосов
/ 05 марта 2012

Когда вы запускаете error_reporting вверх, вы должны заметить следующее:

Уведомление в , строка ...: session_write_close(): Пропуск цифровой клавиши 1330967020

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

2 голосов
/ 05 марта 2012

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

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

Цитата

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...