Еще одна проблема может возникнуть, если вы используете перенаправление через header или навигацию с помощью JavaScript.
Дело в том, что РНР автоматически дописывает идентификатор сессии только к ссылкам вида < a href="..." >, но не делает этого для header-ов, яваскрипта, мета-тегов.
Поэтому надо добавлять идентификатор руками
evgenijj, спасибо, прмерно также сделал. Тут проблема возникла, а если пользователь запретит принятие cookie, то и сессия не сможет сохранится (по крайне мере у меня опять все сглючило, как только я поставил запрет на принятие cookie). Следовательно - как быть?
Сессии используют стандартные, хорошо известные способы передачи данных. Собственно, других-то просто и нет.
Идентификатор - это обычная переменная. По умолчанию ее имя - PHPSESSID.
Задача PHP отправить ее браузеру, чтобы тот вернул ее со следующим запросом. Из уже упоминавшегося раздела FAQ ясно, что переменную можно передать только двумя способами: в куках или POST/GET запросом.
PHP использует оба варианта.
За это отвечают две настройки в php.ini:
session.use_cookies - если равно 1, то PHP передает идентификатор в куках, если 0 - то нет. session.use_trans_sid если равно 1, то PHP передает его, добавляя к URL и формам, если 0 - то нет.
Менять эти и другие параметры сессий можно так же, как и другие настройки PHP - в файле php.ini, а так же с помощью команды ini_set()
Цитата:
По умолчанию в последних версиях PHP включены обе опции. Как PHP поступает в этом случае? Кука выставляется всегда. А ссылки автодополняются только если РНР не обнаружил куку с идентификатором сессии. Когда пользователь в первый раз за этот сеанс заходит на сайт, ему ставится кука, и дополняются ссылки. При следующем запросе, если куки поддерживаются, PHP видит куку и перестает дополнять ссылки. Если куки не работают, то PHP продолжает исправно добавлять ид к ссылкам, и сессия не теряется.
Пользователи, у которых работают куки, увидят длинную ссылку с PHPSESSID только один раз.
Потому что глупости говоришь -- дайте мне кто-нибудь библиотечку php_mysql.dll, только у тебя стоит PHP 4.2, у меня 5.1, у кого-то 4.4.7. И ты думаешь, если ты файлы из разных версий вместе соберешь, все это работать будет?
Вроде бы все сделал по инструкции, а получил:
PHP Warning: PHP Startup: mysql: Unable to initialize module Module compiled with module API=20050922, debug=0, thread-safety=1 PHP compiled with module API=20060613, debug=0, thread-safety=1 These options need to match in Unknown on line 0 PHP Fatal error: Call to undefined function mysql_connect() in P:Apachehtdocstest.php on line 22
Вполне возможно - конфликт версий библиотек. Скачай полный архив и не пудри людям мозги.
Не знаю, в чем проблема. Как вариант -- можно перекодировать UNICODE. Но что-то мне этот вариант не нравится. Прикрепи исходники (форма, скрипт) -- посмотрим, что там. Может какая идея появится.
Все ошибки содержащие фразу «Call to undefined function» указывают, на неподключенное расширение PHP. Если такие ошибки возникают при работы с фунциями MySQL, то это значит, что не подключена библиотека PHP для работы с MySQL – php_mysql.dll