За последние 24 часа нас посетили 49885 программистов и 1730 роботов. Сейчас ищут 658 программистов ...

работа с сессиями

Тема в разделе "PHP для новичков", создана пользователем tommyangelo, 24 авг 2010.

  1. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Чет не получается разобраться....

    Задача - после сохранения в базу направить пользователя на другую страницу, вывести на той странице сообщение об успехе. И чтобы когда он перейдет на след страницу сообщения уже не было.

    Реализовывал это так

    PHP:
    1. $_SESSION['message'] = 'success';
    2. header("Location: index.php");
    В индексе

    PHP:
    1. if (isset($_SESSION['message']) && !empty($_SESSION['message'])) //выводим сообщение
    2. unset($_SESSION['message']);
    И не работает)))) Т.е. если делать без unset - работает, но сообщение остается в сессии, выводится на каждой странице.

    А если ставлю unset в любом месте скрипта - то сессия становится пустой и сообщение не выводится
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    странно.
     
  3. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    удивительно
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Так может unset надо делать после вывода сообщения?
     
  5. wiiio

    wiiio Активный пользователь

    С нами с:
    24 авг 2010
    Сообщения:
    18
    Симпатии:
    0
    PHP:
    1. unset($_SESSION['message'])
    работает при register_globals=off

    если он в режиме - on, то надо дописать строчку
    PHP:
     
  6. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
  7. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    А это может быть из-за ob_start, ob_end_flush?

    т.е. в коде unset естественно идет после вывода. Но это всё загоняется в буфер :) (йа блондинко))))



    Офф конечно))
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    муть. а если во временную перменную запихать?

    а у тебя точно там нигде ничего лишнего нету?
     
  9. fperet

    fperet Активный пользователь

    С нами с:
    16 июл 2007
    Сообщения:
    6
    Симпатии:
    0
    session_unregister('message');
    unset($_SESSION['message']);

    Мб так? Для верности :)

    Кстати стоит посмотреть - относятся ли данные сессии для первой страницы к данным сессии на второй. В плане - в обоих местах есть session_start?
     
  10. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Я так и делаю. То для краткости написано, что выводится, там на самом деле отправляется функции, точнее методу класса, который отвечает за вывод сообщений.
    Так вот эта временная переменная и оказывается пустой)))))

    session_start() в начале самом файла. Создается объект User, у него в конструкторе session_start()

    Короче говоря, спасибо что подсказали, я думал что вдруг туплю и unset в любом месте скрипа гасит переменную(пых же компилятор, думал мож при компиляции бахается). Раз нет - буду ковырять код)))