Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
проблема с сессиями в PHP
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Russian
View previous topic :: View next topic  
Author Message
jodaka
Tux's lil' helper
Tux's lil' helper


Joined: 16 May 2004
Posts: 129
Location: Russia, Togliatty

PostPosted: Sat Mar 05, 2005 1:27 pm    Post subject: проблема с сессиями в PHP Reply with quote

стоят свежеустановленные apache2 2.0.52 и php 4.3.10.
создаем файл:
Code:
<?
session_start();
$_SESSION['yo'] = '111';
?>

запускаем в броузере и видим:
Code:
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/www/kc/www/jod/index2.php:1) in /home/www/kc/www/jod/index2.php on line 2

при этом файл с сессией в /tmp создается и в нем записано значение переменной yo.

Не пойму пока кто виноват, но прикол в том, что HTTP заголовки отправляются сразу, как только в файле встречается "<?"
это я определил, воспользовавшись headers_sent в пхп. Это видно на примере:
Code:
<?

 if (!headers_sent($fname, $lnum)) {
    session_start();
  } else {
    trigger_error("Невозможно начать сессию, HTTP заголовок уже отправлен файлом $fname, на строке $lnum");
  }
?>

запускаем и в броузере видим:
Code:

Notice: Невозможно начать сессию, HTTP заголовок уже отправлен файлом /home/www/kc/www/jod/index2.php, на строке 1 in /home/www/kc/www/jod/index2.php on line 6


вот настройки php:
Code:

Session Support    enabled
Registered save handlers    files user

Directive   Local Value   Master Value
session.auto_start   Off   Off
session.bug_compat_42   On   On
session.bug_compat_warn   On   On
session.cache_expire   180   180
session.cache_limiter   nocache   nocache
session.cookie_domain   no value   no value
session.cookie_lifetime   0   0
session.cookie_path   /tmp   /tmp
session.cookie_secure   Off   Off
session.entropy_file   no value   no value
session.entropy_length   0   0
session.gc_divisor   100   100
session.gc_maxlifetime   1440   1440
session.gc_probability   1   1
session.name   PHPSESSID   PHPSESSID
session.referer_check   no value   no value
session.save_handler   files   files
session.save_path   /tmp   /tmp
session.serialize_handler   php   php
session.use_cookies   Off   Off
session.use_only_cookies   Off   Off
session.use_trans_sid   Off   Off


замечу, что проект, который я сейчас пытаюсь запустить успешно протестирован на старом альт линуксе с древним пхп и апачем, а также под виндой.

помогите пожалуйста настроить пхп/апач.
Back to top
View user's profile Send private message
Ubnormal
n00b
n00b


Joined: 20 Aug 2004
Posts: 17

PostPosted: Sat Mar 05, 2005 3:49 pm    Post subject: Reply with quote

Ну для начала полезно RTFM =)

Например тут: http://php.net/session

А вообще обрати внимание на переменные session.use_cookies у тебя эта возможность выключена вообще - т.е. идентификатор сессии впринципе не шлется клиенту(напомню что слать идентификатор сессии в куки это общепринятая и наиболее безопасная практика)

Далее даже если бы вышеуказанная опция была бы включена, то скорее всего у тебя бы ничего не работало потому что неверно задана переменная:
session.cookie_path /tmp /tmp
ты видимо неправильно понял значение этого параметра - это путь из которого разрешен доступ к куки клиенту. Т.е если у тебя сайт http://pupkin.ru то скрипты сайта смогут получить значение куки только если они находятся ниже относительно http://pupkin.ru/tmp/ Читай спецификацию куки.

Далее смотрим строку:
session.use_trans_sid Off Off
это говорит о том что ты запретил для PHP возможность передавать идентификатор сессии напрямую в ссылках.

Итого:
Всего в PHP зашито 2 механизма передачи идентификатора сессий - через куки и напрямую в ссылках, оба механизма у тебя отключены. Т.е. номинально механизм сессии есть и пытается что-то делать - как ты говоришь он сохраняет данные сессии и все такое, но фактически сессия не работает потому что ее идентификатор никаким образом не передается клиенту.

Рекомендация:
включи session.use_cookies
поправь session.cookie_path c "/tmp" на "/"

Всего хорошего смотрите http://ifun.ru =)
Back to top
View user's profile Send private message
jodaka
Tux's lil' helper
Tux's lil' helper


Joined: 16 May 2004
Posts: 129
Location: Russia, Togliatty

PostPosted: Sat Mar 05, 2005 6:18 pm    Post subject: Reply with quote

Quote:
Ну для начала полезно RTFM =)


поверьте, прежде чем тут спрашивать я пол дня сам пытался проблему решить и все доки просмотрел и весь инет перегуглил

Ubnormal wrote:

А вообще обрати внимание на переменные session.use_cookies у тебя эта возможность выключена вообще - т.е. идентификатор сессии впринципе не шлется клиенту(напомню что слать идентификатор сессии в куки это общепринятая и наиболее безопасная практика)

либо через урл. Хотя у меня в настройках всё было выключено. Я пол дня экспериментировал с настройками и ничего не помогает.

Однако вы не увидели сути вопроса.
Посмотрите на кусок кода, где есть headers_sent
проблема даже не с сессиями (я уже описал, что сессии создаются и переменные в них сохраняются), проблема в том, что HTTP заголовки шлются СРАЗУ, как только пхп парсер встречает "<?"

Ubnormal wrote:

включи session.use_cookies
поправь session.cookie_path c "/tmp" на "/"

они по умолчанию так и были, я их в процессе экспериментов менял, но проблема явно не здесь кроется.

проблема в слишком рано посланных заголовках
Back to top
View user's profile Send private message
Ubnormal
n00b
n00b


Joined: 20 Aug 2004
Posts: 17

PostPosted: Sat Mar 05, 2005 7:08 pm    Post subject: Reply with quote

Проблему я понял прекрасно, просто сразу увидел нелепый конфиг и взялся за перо =) Видимо вы решили пойти от обратного, создав заведомо нерабочую конфигурацию =)

Единственное, что мне приходит в голову глядя на конфиг стандартный конфиг ПХП так это то что у вас возможно в php.ini стоит:
implicit_flush=On

потому как ничего другого похоже не может вызвать такое развитие событий, либо у вас какая-то эксклюзивная версия PHP =)

В случае implicit_flush=On рекомендую исправить на Off если нет, тогда рекомендую найти php.ini-recomended взять за основу и поменьше извращаться.

У меня сработало примерно следующее:
USE="bla bla bla" emerge apache2
USE="bla bla bla" emerge php5
Back to top
View user's profile Send private message
YD
Guru
Guru


Joined: 30 Oct 2004
Posts: 466
Location: Riga, Latvia

PostPosted: Sun Mar 06, 2005 3:02 am    Post subject: Reply with quote

До <?php случаем нету пробелов или переноса строк, и т.п.? Если "<" не первой символ(даже не первый непечатуемый) в файле, то в этом причина.
Back to top
View user's profile Send private message
jodaka
Tux's lil' helper
Tux's lil' helper


Joined: 16 May 2004
Posts: 129
Location: Russia, Togliatty

PostPosted: Sun Mar 06, 2005 2:36 pm    Post subject: Reply with quote

Ubnormal wrote:
Проблему я понял прекрасно, просто сразу увидел нелепый конфиг и взялся за перо =) Видимо вы решили пойти от обратного, создав заведомо нерабочую конфигурацию =)

блин, ну я же писал, что конфигурация изначально была явно рабочая и проблема не в настроках пхп. И даже то, что я эту конфигурацию неслабо извратил не позволяет ни пхп ни апачу посылать заголовки раньше времени.
Ubnormal wrote:

Единственное, что мне приходит в голову глядя на конфиг стандартный конфиг ПХП так это то что у вас возможно в php.ini стоит:
implicit_flush=On

стандартно off и я ничего не трогал

Ubnormal wrote:

USE="bla bla bla" emerge apache2
USE="bla bla bla" emerge php5

вчера перепробовал разные версии и апачей и пхп и докопался до истины.

проблема оказалась в кодировке файла. У меня локаль UTF8. Если создать файл в другой кодировке - всё ок, в UTF-8 - косяк. Где ковырять настройки UTF ?
P.S. не знаю, важно это или нет, но по дефолту у меня апач отдает документы именно в UTF8
Back to top
View user's profile Send private message
Ubnormal
n00b
n00b


Joined: 20 Aug 2004
Posts: 17

PostPosted: Sun Mar 06, 2005 3:19 pm    Post subject: Reply with quote

jodaka wrote:

вчера перепробовал разные версии и апачей и пхп и докопался до истины.

проблема оказалась в кодировке файла. У меня локаль UTF8. Если создать файл в другой кодировке - всё ок, в UTF-8 - косяк. Где ковырять настройки UTF ?
P.S. не знаю, важно это или нет, но по дефолту у меня апач отдает документы именно в UTF8


Очень странно.... У меня локаль тоже UTF-8 Apache2 и PHP5 и куча исходников PHP набрана именно в UTF-8 и никогда никаких проблем не было. Рискну предположить что юникод здесь абсолютно не при чем это и ни коим образом не должен влиять на порядок отсыла заголовков. Единственное что вызывает подозрения так это тот факт, что любой юникодный текст если я не ошибаюсь начинается с пары каких-то юникодных козявок. Соответственно, если интерпретатор пхп каким-то образом решит, что кодировка файла не юникод, вполне возможна ситуация, что он эти козявки отправит клиенту =) И тогда при отключенной буферизации(кстати думаю твой случай) - пиши пропало тогда получается, что контент действительно ушел и заголовки слать поздно. Думаю что это твоя ситуация. Думаю что надо копать в сторону системной локали, локали файловой системы и типо того. Давай ка
$ locale
в студию
Back to top
View user's profile Send private message
jodaka
Tux's lil' helper
Tux's lil' helper


Joined: 16 May 2004
Posts: 129
Location: Russia, Togliatty

PostPosted: Mon Mar 07, 2005 6:54 am    Post subject: Reply with quote

Ubnormal wrote:
Давай ка
$ locale
в студию

Code:
anton@localhost ~ $ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=


на другом форуме порекомендовали использовать "правильные редакторы" у которых есть опция "не писать UTF8 заголовки" :-/
Back to top
View user's profile Send private message
Ubnormal
n00b
n00b


Joined: 20 Aug 2004
Posts: 17

PostPosted: Mon Mar 07, 2005 7:07 am    Post subject: Reply with quote

Всё я сдаюсь =) Ну если правильный редактор поможет, то мой правильный редактор GVim =)))
Back to top
View user's profile Send private message
YD
Guru
Guru


Joined: 30 Oct 2004
Posts: 466
Location: Riga, Latvia

PostPosted: Mon Mar 07, 2005 9:11 pm    Post subject: Reply with quote

Да, слышал у людей на M$ были траблы с тем, что 2-3 символа вначале, которые тольков HEX editor'e видны. KWrite к примеру нормально работает, когда стоит тип кодировки UTF-8.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Russian All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum