За последние 24 часа нас посетили 18800 программистов и 1652 робота. Сейчас ищут 939 программистов ...

Проблема сессии + редирект

Тема в разделе "Прочие вопросы по PHP", создана пользователем csmagazine, 21 май 2013.

  1. csmagazine

    csmagazine Новичок

    С нами с:
    21 май 2013
    Сообщения:
    1
    Симпатии:
    0
    Добрый день, перенесли сайт к на другой хостинг, и не поймём в чём проблема.
    На локальном сервере и на трёх других хостингах всё работает, а на новом хосте не пашет.

    Конструкция присвоения сессий и редиректа через header(); выдает белый экран, если редирект через <meta></meta> то так работает, но сессии всё равно не передают, в чём проблема не поймём.

    Пример конструкции:

    compiled.php
    Код (Text):
    1. if (empty($text)){
    2. session_start();
    3. $_SESSION['msg']='1';
    4. header("Request-URI: ./index.php");
    5. header("Content-Location: ./index.php");
    6. header("Location: ./index.php");}
    index.php
    Код (Text):
    1. <?php
    2. session_start();
    3. if ($_SESSION["msg"]=='1')
    4. {echo("<div class='alert alert-success'>Нет текста!</div>");}
    5. unset($_SESSION['msg']);
    6. ?>
    После выполнения остаётся на странице compiled.php и белый экран
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а кука с сессией создается?
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Если не пашет header, первое что надо проверить - не вклинился ли какой-то вывод текста ДО header! Перенос на другой сервер может быть вообще непричем.
    Самые популярные причины:
    • пустая строка перед <?php
    • пустая строка после последнего ?> в подключаемом файле
    • пресловутый BOM.
    Временно включи полный вывод предупреждений, тогда, если я прав, увидишь Warning про header.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    + кодировка играет роль
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    как?
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    header ругается когда скрип кодирован анси, утф-8 с бом, весь гугл об этом говорит
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    с бомом не спорю. а про анси - никогда не встречал. и в теории это невозможно =)
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    так проблема в BOM, а не в кодировке :) BOM идет первым байтом в файле, т.е. до любого текста, в .т.ч. до "<?php", то есть это уже вывод. а вывода до header быть не должно!
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    епт так кодируют же всетаки "кодировать в UTF-8 (без BOM)".
    нее конечно можно два символа удалить в HEX коде геморойно О.о
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    только чур правильные. а то вдруг там не малышки...
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    FF FE

    Добавлено спустя 33 секунды:
    если память не изменила с кашей
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    При чем тут hexeditor? Это твое личное дело каким образом отредактировать файл.
    Просто не засоряй никому мозг этим
    PHP наплевать на кодировку. Да и нигде в файле не ставится отметка в какой кодировке ты его редактировал. Для PHP твои исходники это поток данных + поток кода. Всё, что за "скобками" <?php ?> считается выходными данными. BOM стоит за "скобками".
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    не соглашусь
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    У вас запускаются сессии на каждой странице?
    У вас каждая новая страница является индексированной?
    Сессии не могут работать после потока кода:
    Кодировка у php плохо воспринимает юни-код (придется писать другой подход, чтобы правильно работали русские буквы-это касается конкретно работы с юни-кодом).

    В случае BOM возникает предупреждение, что до начала потока данных (в теге контейнере BOM<?php ?> где используется запуск сессий и отправка заголовков) уже есть вывод, а так не получится.

    Кодировку для себя ты сам выбираешь и принимаешь данные.
    Главное, чтобы не безопасные символы не приходили.