• Авторизация


Без заголовка 18-09-2005 01:40 к комментариям - к полной версии - понравилось!


Привет всем!
Кто может подсказать?
Как сервер я ипользую пакет Денвер. У меня в коде есть такеой фрагмент, связанный с записью еременных в cookies:

session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();

При том, что переменные записываются, я всегда получаю сообщение:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at z:\home\stellium\www\membership_forms\savemembershipformdata.php:8) in z:\home\stellium\www\membership_forms\savemembershipformdata.php on line 192

На 192 строке как раз находится session_start();
Что не правильно? Или как заблокировать выдачу это сообщения?
Спасибо заранее.
вверх^ к полной версии понравилось! в evernote
Комментарии (12):
Значится так - начнем с азов! ;) В ХТТП хедеры идут впереди текста ответа. Сессии часто реализуются через куки, которые как раз прописываются в хедерах. Вызов session_start модифицирует хедеры. И если где-то по пхп-коду сделать вывод любого текста, а потом дергнуть session_start то происходит коллизия - уже пошло тело ответа броузеру, а старт сессии требует модифицировать хедеры, которые уже ушли. Ну и та ошибка - это предупреждение, что так делать нельзя.
Короче - поставь вызов session_start в самое начало своего пхп-кода и должно быть тебе счастье! :) Еще - не обязательно дело в явном выводе через echo или print до старта сессии. Это может быть просто пробел в начале файла, перед тегом
Саракш 18-09-2005-07:35 удалить
Ага.... Спасибо. КАк поробую, так отпишу как вышло.
Еще раз спасибо.
holy_diver 18-09-2005-11:44 удалить
Или можно в php.ini включить output_buffering (если не ошибаюсь). Или покурить мануал на предмет ob_start, ob_flush, и т.д.
Wethril_Haldar 18-09-2005-15:21 удалить
holy_diver, 3 месяца за флэшроликом убили мои знания, щас усиленно курю мануал...)(
Саракш 18-09-2005-16:57 удалить
Ага. Но если заблокировать message, это тоже решение? Ну, в смысле того, что может он правильную вещь говорит, которая может на дальнейшей работе отразиться, а я ему через ini, мол "пошел ты..." :)
Кстати, РНР для меня язык новый, я его по книжке учу. А ты когда про хидеры вчерась высказался, я подумал, что недочитал чего-то. Перерыл книжку снова - ни фига. Может дашь какой линк, где прочесть про это? И почему хидеры сами сессию запускают? Я не понял тебя вчера.
Спасибо заранее.
holy_diver 18-09-2005-17:08 удалить
php_manual курить надо - будет ЩАСТЬЕ :)
Просто достаточно знать, что session_start, set_cookie и подобное должно выполняться до того, как начнётся какой-нибудь вывод.
В колонках играет: Ozzy Osbourne - Breaking All The Rules

LI 5.8.22
Где почитать честно говоря не подскажу - я это по разным статьям нашел, по ману ПХП-шному и тихноькому наступанию на грабли ;)
Насчет подавить это сообщение и не париться - вряд ли выйдет что-то путнее. Ругается оно правильно и вообще в мане есть такие слова на эту функецию:
Note: If you are using cookie-based sessions, you must call session_start() before anything is outputted to the browser.
Т.е. другими словами, но о том же что уже и говорилось здесь - не стоит ничего выводить до вызова session_start().
Насчет хедеров - они сессию не стартуют. Через хедер приходит уведомление броузеру про идентификатор сессии - это если сессия работает через куки (в хедерах есть поле для куков и вот туда этот идентификатор сессионный записывается).
Вообще я б на твоем месте пока не замарачивался на все эти чепуховины и сделал простую вещь - поставил вызов session_start() в самом начале твоего файла :)
Саракш 19-09-2005-00:40 удалить
непобедимый, holy_diver,, БОЛЬШУЩЕЕ спасибо!
Получилось ! :)
JASterus 19-09-2005-10:42 удалить
строку Sessin_start(); нужно прописывать САМОЙ ПЕРВОЙ строкой в скрипте! а не 192...

LI 5.8.22
Саракш 19-09-2005-14:27 удалить
Кстати, у меня еще один вопрос возник. Если в скрипте присутствует Sessin_start() и не присутствует session_destroy(), что таже самая сессия будет распространяться и на последующие вызываемые скрипты (страницы)? Я понял тьак, что session_destroy()нужно вызывать только в случае Log out. Это правильно?
Спасибо.
JASterus 20-09-2005-09:18 удалить
правильно. если сессия не закрыта, она будет распространяться на все вызываемые сткрипты, если в них есть строка Session_start();

LI 5.8.22


Комментарии (12): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Без заголовка | community_coding - Сообщество программистов | Лента друзей community_coding / Полная версия Добавить в друзья Страницы: раньше»