Текущий архив: 2002.12.12;
Скачать: CL | DM;
Вниз
Кто знает PHP, помогите!!! Проблемы с сессией... Найти похожие ветки
← →
SONJA (2002-11-20 13:03) [0]Задача: допустить на страницу только разрешенного пользователя.
Решение:
1) в БД (MySQL) сохраняется юзер с пасвордом.
2) при входе юзера на страницу, Z.B. admin.php, ему выдается форма, куда нужно ввести логин и пароль.
3) если юзер ввел пароль и логин, то запускается сессия :
start_session()
4) проверяется наличие данного юзера в БД. Если юзер есть в БД, то он валидный, и происходит регистрация переменных сеанса:
$valid_user=$login;
session_register("valid_user");
5)после этого сеанс сохраняется на сервере, а юзер получает защищенную страницу.
Проблема:
В начале защищенной страницы генерируется предупреждение:
Warning: Cannot send session cache limiter - headers already sent (output started at c:\Program Files\Apache Group\Apache2\htdocs\bbg\update_catalogue.php:2) in c:\Program Files\Apache Group\Apache2\htdocs\bbg\update_catalogue.php on line 5
После предупреждения идет совершенно нормальное содержание защищенной страницы.
Вопросы:
Является ли это предупреждение следствием каких-либо настроек сессии в php.ini?
Можно ли избавиться нормальным способом от вывода этого предупреждения, и если можно, то как?
← →
AL2002 (2002-11-20 13:34) [1]
> Является ли это предупреждение следствием каких-либо настроек
> сессии в php.ini?
Никогда их не юзал, потому что нахрен не нужны, только тормозят.
> Можно ли избавиться нормальным способом от вывода этого
> предупреждения, и если можно, то как?
@start_session();
← →
SONJA (2002-11-20 13:42) [2]>Никогда их не юзал, потому что нахрен не нужны, только тормозят.
Не юзал настройки или сессии?
← →
sonja (2002-11-20 13:46) [3]На самом деле все оказалось гораздо проще...
Ответ я нашла, приведу его ниже, так как именно в этом состояла моя ошибка:
FAQ.PHPCLUB.NET
Warning: Cannot add header information...
--------------------------------------------------------------------------------
Warning: Cannot add header information - headers already sent by (output started at /www/script.php:5) on line 20
Для начала узнаем, как вообще общается броузер с сервером. Происходит это по специальному протоколу HTTP. К примеру, когда ты набраешь адрес, или нажимаешь на ссылку, броузер посылает HTTP запрос серверу. Сервер отвечает. Первыми в ответе ВСЕГДА идут HTTP заголовки. Хоть один. И только потом уже сервер посылает, а броузер принимает, текст, или картинку, или файл - в общем, что было запрошено. Cобственно, из-за этого правила - сначала заголовок, а потом информация, и происходит данная ошибка. РНР, для твоего удобства, посылает заголовки автоматически, как только скрипт начинает выдавать бровзеру информацию. Соответственно, если хоть один пробел был уже передан пользователю, заголовки уже ушли, и снова их послать уже никак не можно. А, как ты уже, наверное, догадался, команда header(), или setcookie, и некоторые другие, посылают HTTP заголовки.
Разберем теперь приведенное выше предупреждение.
Cannot add header information - headers already sent. Все ясно написано. \"Не могу послать заголовок - поезд уже ушел\" - пишет нам РНР. Дальше РНР сообщает, в каком скрипте и в какой его строке (output started at /www/script.php:5) произошел вывод информации, вызвавший автоматическую посылку заголовков. Очень легко найти и исправить. Может быть там html теги, может быть, echo, а может и просто незамеченая пустая строка или пробел перед первым тегом <?. Так вот сам header() и всю логику, которая его вызывает, надо поместить ДО любого вывода в броузер. Просто перенести повыше в скрипте.
------------------
Мои лучшие пожелания всем...
← →
AL2002 (2002-11-20 13:47) [4]
> SONJA © (20.11.02 13:42)
> >Никогда их не юзал, потому что нахрен не нужны, только
> тормозят.
>
> Не юзал настройки или сессии?
Хм... сессии.
← →
Sergo (2002-11-20 13:48) [5]Проверку юзера надо делать в отдельном файле и ничего не выводить на экран до проверки юзера.
← →
AL2002 (2002-11-20 13:50) [6]
> sonja © (20.11.02 13:46)
Так вот сам header() и всю логику, которая его вызывает, надо поместить ДО любого вывода в броузер.
Што-о-о вы такое говорите? :))
← →
McSimm (2002-11-20 13:54) [7]
> sonja © (20.11.02 13:46)
Все правильно. Заголовки, включая куки должны быть переданы до начала вывода документа.
Добавлю только что существуют настройки PHP для буферизации вывода что позволяет "передавать" заголовки в любом месте скрипта, т.к. реально текст пишется в буфер и отправляется позже. Но я не рекомендую пользоваться этим.
← →
sonja (2002-11-20 14:24) [8]>AL2002 © (20.11.02 13:50)
>Што-о-о вы такое говорите? :))
Это не я говорю, а в ФАКе написано: FAQ.PHPCLUB.NET
Именно ФАК я долго и упорно искала, так как догадывалась, что проблема решается тривиально.
>Sergo © (20.11.02 13:48)
>Проверку юзера надо делать в отдельном файле и ничего не выводить на экран до проверки юзера.
До проверки юзверя на экран ничего и не выводится...
ПХП вполне справляется с поиском юзера в БД, и отдельный файл, по-моему, не особо нужен.
← →
AL2002 (2002-11-20 14:36) [9]
> sonja © (20.11.02 14:24)
> >AL2002 © (20.11.02 13:50)
> >Што-о-о вы такое говорите? :))
>
> Это не я говорю, а в ФАКе написано: FAQ.PHPCLUB.NET
> Именно ФАК я долго и упорно искала, так как догадывалась,
> что проблема решается тривиально.
Да ладно. Но причину-то выяснила? Толку от этих факов. С английским надо дружить.
ЗЫ:
Я тоже упорно фак ищу. Только не такой.
^_^
Страницы: 1 вся ветка
Текущий архив: 2002.12.12;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.004 c