Проблемы с сессией после header( "location: " на некоторых серверах

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Есть код:
PHP:
if(
                    //Если была отправлена форма и статус равен 1, то очищаем данные в массиве
                    $val_button === 1 && $_SESSION['status_step'][$step] ){
                    unset( $_SESSION['data_s'][2]); //очищаем координаты
                    //присваиваем номер шага = 2
                    $_SESSION['now_step'] = 2;
                    //делаем редирект на эту же страницу, но уже с другим шагом. В сессии здесь есть элемент массива со всеми данными
                    header( "location: ".$cat->parseUrl( $full_url , $shot_url )  ); 
                    //здесь уже нет элемента массива
                    exit;
                }
Проблема такая. До хедера вывожу все данные print_r ($_SESSION); Хедер закомментировал. Все нормально, все сохранено. Перезагружаю страницу, все есть. Как только раскомментирую строку с хедером, после перенаправления все данные из сессии стираются. На локалке все работает. Понять не могу, что за ерунда такая, что за чудеса. Я так понимаю, чего-то на хостинге настроено по другому.
Или может быть на файл какой-то .htaccess указал chmod 444, может из-за этого?
 
Последнее редактирование:
Первое что на ум пришло. Может нет автостарта сессии? Может принудительно ее стартовать session_start()?
 
Первое что на ум пришло. Может нет автостарта сессии? Может принудительно ее стартовать session_start()?
Посмотрел в коде, есть старт, т.к. сессию то вывожу с данными, да и сохраняются они туда. После перезагрузки не видна сессия, т.е. пустая.

Видимо сессия не определяется, как моя.

Сделал следующее. В начале кода я получаю из браузера $_COOKIE['PHPSESSID'] и передают в старт сессии. Тогда все начинает работать, как надо.
Но вопрос в том, что на локальном работает и без этого PHPSESSID.
И еще интереснее, что другой пользователь с другого ПК и другого IP тоже смог выполнить код, как задумано, но также без строки принудительного указания $_COOKIE['PHPSESSID']
В чем недосмотр? Просканил CMS DLE, там нигде не указывается старт сессии с PHPSESSID, везде просто dle_session();
 
И еще интереснее, что другой пользователь с другого ПК и другого IP тоже смог выполнить код, как задумано, но также без строки принудительного указания $_COOKIE['PHPSESSID']

Интересно а если вы в другом браузере попробуете? Получается при перезагрузке у вас пересоздается сессия игнорируя куки.
 
Интересно а если вы в другом браузере попробуете? Получается при перезагрузке у вас пересоздается сессия игнорируя куки.
ничего не понял.

Решил так: принудительно указал и все. Стало везде работать. Правда через день все повторилось также, не работал ни в одном браузере. Написал хостеру. Больше проблем не было. Хостер не признался.
 
ничего не понял.

Решил так: принудительно указал и все. Стало везде работать. Правда через день все повторилось также, не работал ни в одном браузере. Написал хостеру. Больше проблем не было. Хостер не признался.

Как всегда и бывает. :D
 
Как всегда и бывает. :D
но все равно, вопрос скорее в том, почему может работать без передачи куков? Какая настройка на сервере за это отвечает? И когда нужно передавать куки в сессию для ее идентиикации?
 
но все равно, вопрос скорее в том, почему может работать без передачи куков? Какая настройка на сервере за это отвечает? И когда нужно передавать куки в сессию для ее идентиикации?

Судя по всему была проблема с созданием файла сессии на серваке.
 
Попробуйте поковырять тут:
get_defined_vars()
До header и после.
 
Назад
Сверху