Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.12.12;
Скачать: [xml.tar.bz2];

Вниз

Кто знает 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
1-36167
dumb
2002-12-04 01:09
2002.12.12
C++ 2 Delphi


14-36387
McSimm
2002-11-18 16:57
2002.12.12
Последствия встречи в Москве III


1-36214
ltolean
2002-12-01 14:19
2002.12.12
Program Icon


14-36349
zzet
2002-11-18 21:18
2002.12.12
страна непуганых буратин.. гы..


1-36274
antoniz
2002-12-02 14:07
2002.12.12
Люди подскажите плиз





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский