Я пытаюсь диагностировать проблему 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) {...}
Чтобы восстановить ошибку:
var_dump($_SESSION)
в верхней части возвращает array(0) {}
, который ожидается, и тот, который в botton возвращает массив из трех элементов, также как и ожидалось. $_SESSION
устанавливаются при загрузке предыдущей страницы, первый дамп все еще возвращает array(0) {}
. Я упростил свой код здесь, чтобы решить эту проблему, но у меня есть другая страница, которая без затруднений возвращает переменную $ _SESSION (и первый var_dump
создает var_dump
из одного элемента). Является ли проблема здесь тем, что я передаю форму себе, и если да, существует ли способ, отличный от массива $_SESSION
передавать значения с одной страницы на другую? Я просмотрел документацию по PHP и искал высоко и низко, но не поймал ничего, что помогло.
Следует также отметить, что идентификатор сеанса один и тот же для загрузок страниц, поэтому появляется состояние сеанса, которое поддерживается от загрузки страницы до загрузки страницы.
Заранее спасибо за помощь.
Используйте эту строку в верхней части каждой веб-страницы:
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();
в моих сценариях.
Удивительная проблема с разрешениями заключается в том, что файл сеанса написан, но не может быть прочитан. Таким образом, сеансы автозапуска всегда пусты.