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

Тема в разделе "PHP", создана пользователем danneo, 26 дек 2015.

Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Есть код:
    PHP:
    if(
                        
    //Если была отправлена форма и статус равен 1, то очищаем данные в массиве
                        
    $val_button === && $_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, может из-за этого?
     
    Последнее редактирование: 26 дек 2015
  2. udjin123

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    155
    Симпатии:
    111
    Первое что на ум пришло. Может нет автостарта сессии? Может принудительно ее стартовать session_start()?
     
    hevoc нравится это.
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Посмотрел в коде, есть старт, т.к. сессию то вывожу с данными, да и сохраняются они туда. После перезагрузки не видна сессия, т.е. пустая.

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

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

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    155
    Симпатии:
    111
    Интересно а если вы в другом браузере попробуете? Получается при перезагрузке у вас пересоздается сессия игнорируя куки.
     
    hevoc нравится это.
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    ничего не понял.

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

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    155
    Симпатии:
    111
    Как всегда и бывает. :D
     
  7. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    но все равно, вопрос скорее в том, почему может работать без передачи куков? Какая настройка на сервере за это отвечает? И когда нужно передавать куки в сессию для ее идентиикации?
     
  8. udjin123

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    155
    Симпатии:
    111
    Судя по всему была проблема с созданием файла сессии на серваке.
     
  9. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    нет... он создавался, т.к. если header не делать, данные в сессии все сохраняются.
     
  10. Relimeyt

    Relimeyt Создатель

    Регистр.:
    3 май 2012
    Сообщения:
    17
    Симпатии:
    4
    Попробуйте поковырять тут:
    get_defined_vars()
    До header и после.