PHP $ _SESSION Возвращение пустого массива даже когда значения заданы

Я пытаюсь диагностировать проблему PHP. Я передаю значения массиву $_SESSION , и эти значения не принимаются массивом. Я использовал var_dump($_SESSION) чтобы узнать, что возвращается, и я получаю array (0){} . Это верно, даже когда я знаю, что сеанс установлен, и значения добавляются в массив.

Вот упрощенная версия моего кода (index.php):

 <?php session_start(); var_dump($_SESSION); if ($_REQUEST['query'] == "" or is_null($_REQUEST['query'])) { $errormsg = "You must enter a search term to query. Please try again."; } ?> <form name="product_search" id="product_search" method="post" action="index.php"> <input size="60" type="text" name="query" id="query" <?php echo "value=\"" . $_REQUEST['query'] . "\" "; ?>/> <?php if (isset($errormsg)) {echo "<span class=\"errormsg\">" . $errormsg . "</span>";} ?> <input type="submit" class="searchBtn" value="Search"/> <?php $_SESSION['query'] = 'foo'; $_SESSION['search_field'] = 'man'; $_SESSION['results'] = 'chu'; ?> var_dump($_SESSION); //Will dump array(3) {...} 

Чтобы восстановить ошибку:

  1. Загрузите страницу. Здесь нет проблем; var_dump($_SESSION) в верхней части возвращает array(0) {} , который ожидается, и тот, который в botton возвращает массив из трех элементов, также как и ожидалось.
  2. Отправьте форму с чем-то в поле запроса (чтобы отменить проверку). Несмотря на то, что переменные $_SESSION устанавливаются при загрузке предыдущей страницы, первый дамп все еще возвращает array(0) {} .

Я упростил свой код здесь, чтобы решить эту проблему, но у меня есть другая страница, которая без затруднений возвращает переменную $ _SESSION (и первый var_dump создает var_dump из одного элемента). Является ли проблема здесь тем, что я передаю форму себе, и если да, существует ли способ, отличный от массива $_SESSION передавать значения с одной страницы на другую? Я просмотрел документацию по PHP и искал высоко и низко, но не поймал ничего, что помогло.

Следует также отметить, что идентификатор сеанса один и тот же для загрузок страниц, поэтому появляется состояние сеанса, которое поддерживается от загрузки страницы до загрузки страницы.

Заранее спасибо за помощь.

Related of "PHP $ _SESSION Возвращение пустого массива даже когда значения заданы"

Используйте эту строку в верхней части каждой веб-страницы:

if (!isset($_SESSION)) { session_start(); }

Если вы инициализируете $_SESSION на сценарий нижнего уровня, тогда переменная `$ _SESSION недоступна на верхнем уровне.

Убедитесь, что ваша конфигурация сервера разрешает куки сеанса.

 session.use_cookies = 1 

Альтернативой является то, что идентификатор сеанса передается в GET, и вам придется специально добавить его к действию формы, которое вы не делаете. Следовательно, нет сеанса после публикации значений.

Правильно ли включены сеансы? Вот документация для настроек сеанса PHP-сервера http://www.php.net/manual/en/session.configuration.php

Чтобы добавить к ответу Джереми, вы также можете отказаться от куки.

Вместо SESSION Вы все равно можете использовать POST, поскольку вы все равно используете его – просто упакуйте переменные и их значения в один (или более) скрытый ввод (вы можете сериализовать POST из одного отправителя и вставить его на скрытый ввод или вы можете создать столько скрытых входов, сколько у вас есть переменные от первого представления). Затем во второй submit (возможно, второй шаг многоступенчатой ​​формы) Вы публикуете новые данные и, конечно же, данные с первого представления …

Но я по-прежнему предпочитаю сеанс, так как это проще (не нужно вводить больше кода).

Вы уверены, что СЕССИЯ не восстанавливается при каждой загрузке / отправке страницы? Если вы восстанавливаете идентификатор сеанса при загрузке страницы / отправке старого сеанса (с его данными), теряется и данные вставляются в новый идентификатор сеанса …

Также рекомендуется: забудьте о $ _REQUEST, если вы не уверены, что он необходим, и скорее используйте только $ _GET или $ _POST, чтобы получить данные с нужного канала …

session.cookie_secure = 1 может вызвать эту проблему

UPD: check session.cookie_secure установлен на 0 для незащищенного соединения.

 ini_set('session.cookie_secure', '0') 

Работал для меня.

UPD: Аналогичный вопрос PHP session.cookie_secure: отключает сеансы, когда установлено значение true

Это немного поздно для игры, и, возможно, никто не сталкивается с этой проблемой конфигурации. На самом деле, надеюсь, нет.

Мой веб-хост просто переместил все мои сайты на новый сервер. Они royally перепутали права файла и каталога, а также пользователь, который запускает сценарии веб-сервера и php.

Кажется, что

 session.auto_start = 1 

flag приводит к другому пользователю (и я не могу сказать, какой) пытается прочитать файл сеанса, чем если бы я установил его в 0 и просто использовал

 session_start(); 

в моих сценариях.

Удивительная проблема с разрешениями заключается в том, что файл сеанса написан, но не может быть прочитан. Таким образом, сеансы автозапуска всегда пусты.