За последние 24 часа нас посетили 64035 программистов и 1740 роботов. Сейчас ищут 908 программистов ...

Запись в сессию данных формы

Тема в разделе "Прочие вопросы по PHP", создана пользователем Feanor1982, 8 сен 2008.

  1. Feanor1982

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

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Доброго времени суток. Итак ситуация. Пользователь заполняет форму, на которой есть инпуты и селекты. Я хочу всё, что пользователь заполнил, записать в сессию. Делаю так
    Код (Text):
    1.  
    2. if($_POST['reason']=='search'){session_start();
    3.  foreach($_POST as $key=>$value)$_SESSION[$key]=$value;}
    Но в результате имею следующее сообщение об ошибке из другого скрипта, который подключается к этой же сессии.
    Код (Text):
    1.  
    2. Warning: session_start() [function.session-start]: Node no longer exists in
    Соответственно из сессии ничего прочитать нельзя. Из-за чего может возникать такая проблема
     
  2. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
  3. Feanor1982

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

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Сходил по ссылке, но ничего вразумительного г-да Полнай и Натан Фритц ничего мне не смогли сообщить. Они склоняются к тому, что это баг PHP, но тогда почему в том же PHP 5 у меня спокойно сессии работали на локалхосте в других проектах и спокойно потом переносились на хостинг? Из-за особенностей именно этого проекта (требуется статический IP-адрес для внешних запросов) я не могу потестить на локалхосте и отлаживаю всё на удалённом сервере, который имеет нужный мне статический IP. Странно ещё другое. Ошибка проявляется не сразу. После того, как я сохранил все переменные формы в сессию, я создаю на клиенте новое окно.
    Код (Text):
    1.  
    2. $Scr='<script language="JavaScript">var mywindow=window.open("http://t-season.ru/temp/1/tours.php");</script>';
    3.   echo($Scr);
    В вызываемом таким образом скрипте тоже стартует сессия, но она пустая, т.к. ни одна из переменных формы не сохранилась. Переменные с формы точно пришли, проверил записью в файл. На хостинге для сессий используются куки. Возникает резонный вопрос, при создании в браузере нового окна, это окно отсылает на сервер куку или нет. В опере я чётко вижу, что кука получена и всю информацию о ней. Меня сильно смущает параметр Only sent to creator, установленный в yes. Под создателем куки подразумевается любой скрипт хоста или только скрипт с тем же именем, что и создатель куки?
    После повторного сабмита формы и вылазит вышеупомянутая ошибка, причём как в скрипте обработки формы, так и вызванном из этого скрипта новом окне. Так что пока что мне совершенно непоянтно откуда у этой проблемы растут ноги и что с ней делать. Подскажите, кто что может знать об этом.
     
  4. vaqvaq

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

    С нами с:
    19 авг 2008
    Сообщения:
    6
    Симпатии:
    0
    Была такая ситуация.. я тоже новичок.. попробуйте объявлять функцию session_start() в самом самом начале кода.
     
  5. Feanor1982

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

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Дело оказалось в том, что на хостинге стояло register_globals=on. Оказалось, что такая настройка с SimpleXML и сессиями не сочетается и вот почему. При запуске сессии, в сессию записываются все переменные, включая объекты. А затем объект SimpleXML по понятной причине не может корректно прочитаться из сессии. Пришлось отказаться от стандартных сессий и пользоваться собственными на базе MySQL.
     
  6. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Встроенные объекты PHP не поддаются сериализации. Точнее, их обратно не извлечь.
     
  7. Feanor1982

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

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Это-то понятно. Но мне эти объекты в сессию засовывать и не надо было. Достаточно было скалярных переменных. Просто я писал модуль для движка, который без register_globals=on работать не может, а меня об этом заранее не предупредили. Пришлось переделывать на базу данных, хотя хотел ограничиться встроенными сессиями :(
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    delete его, delete!
     
  9. Anonymous

    Anonymous Guest

    shift + delete.
     
  10. Feanor1982

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

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Кстати, это похоже OsCommerce.