-Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в community_coding

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.12.2004
Записей:
Комментариев:
Написано: 536


Без заголовка

Воскресенье, 18 Сентября 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();
Что не правильно? Или как заблокировать выдачу это сообщения?
Спасибо заранее.
Рубрики:  вопросы

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

LI 5.8.22
Ответить С цитатой В цитатник
непобедимый   обратиться по имени Воскресенье, 18 Сентября 2005 г. 17:13 (ссылка)
Где почитать честно говоря не подскажу - я это по разным статьям нашел, по ману ПХП-шному и тихноькому наступанию на грабли ;)
Насчет подавить это сообщение и не париться - вряд ли выйдет что-то путнее. Ругается оно правильно и вообще в мане есть такие слова на эту функецию:
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 Сентября 2005 г. 00:40 (ссылка)
непобедимый, holy_diver,, БОЛЬШУЩЕЕ спасибо!
Получилось ! :)
Ответить С цитатой В цитатник
JASterus   обратиться по имени Re: Без заголовка Понедельник, 19 Сентября 2005 г. 10:42 (ссылка)
строку Sessin_start(); нужно прописывать САМОЙ ПЕРВОЙ строкой в скрипте! а не 192...

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

LI 5.8.22
Ответить С цитатой В цитатник
Слесарь_гинеколог   обратиться по имени Вторник, 20 Сентября 2005 г. 15:44 (ссылка)
ОК. Спасибо.
Ответить С цитатой В цитатник
Комментировать К дневнику Страницы: [1] [Новые]
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку