CodeNet / Веб программирование / Часто задаваемые вопросы на Forum.CodeNet.Ru. Веб-программирование.
Сессии и session_start()
Q: Выдается ошибка "Cannot send session cookie - headers already sent by".
Q: Почему сессии не работают ?()
Ошибка возникает из-за того, что что-то выводится перед session_start(), а этого делать нельзя:
---[ file.php ]--- <? print "aaaaaaaaaa"; session_start(); ?> ---[ file.php ]---
также нельзя так (первая строка пустая):
---[ file.php ]--- <? session_start(); ?> ---[ file.php ]---
Нужно делать вот так:
---[ file.php ]--- <? session_start(); print "aaaaaaaaaa"; ?> ---[ file.php ]---
Все из-за того что HTTP ответ состоит из двух частей - заголовка и тела документа. Тело документ отделается от заголовка пустой строкой, например:
HTTP/1.1 200 OK Date: Fri, 13 Feb 2004 10:02:00 GMT Server: Apache/1.3.23 (Unix) PHP/4.1.2 rus/PL30.11 X-Powered-By: PHP/4.1.2 Connection: close Content-Type: text/html; charset=windows-1251 Expires: Thu, 01 Jan 1970 00:00:01 GMT Last-Modified: Fri, 13 Feb 2004 10:02:00 GMT <HTML> <HEAD> ....
ID сессии хранится в Cookies, а кукисы устанавливаются именно в заголовке. Если начинается вывод данных, то PHP формирует и отправляет заголовок. После этого функции setcookie(), header() и session_start() не работают.
Посмотрите функции: ob_start, header, setcookie, session_start
