Арендовал новый сервер и установил на Debian новый PHP 5.3.3-7+squeeze14 и тут возникла проблема PHP REQUEST не содержал в себе $_COOKIE.
Сразу скажу, что в своих проектах, где необходимо авторизовать пользователя, я пользуюсь старым добрым механизмом PHP сессий. На страницах которые требуется показывать как посетителям прошедшим авторизацию, так и нет, в самом начале кода применяю такую конструкцию:
if (isset($_REQUEST[session_name()])) session_start();
В этом случае, в отличии от простого вызова функции session_start(), сессия стартанет только если браузером был прислан идентификатор сессии. Т.е. например если посетитель ранее успешно залогинился, то на странице будут доступны сессионные переменные, а если нет то вообще говоря сессия не будет здесь активна.
Благодаря тому что сессия не запускается без разбору, немного снижается нагрузка на сервер и решается проблема появления в поисковиках адресов страниц с переменной PHPSESSID в конце.
Недавно в результате переустановки php на локальной машине сессии перестали работать. Более детальное изучение показало, что с ними все нормально, а все дело в том что глобальный массив $_REQUEST просто напросто пуст, вернее никаких сессионных переменных в нем нет. Глянув файл php.ini , я обнаружил строку:
request_order = "GP"
Значение "GP" параметра request_order говорит о том, что в массив $_REQUEST будут заноситься только $_GET или $_POST, получается если переменная передается через $_COOKIE, а в нашем случаем с PHPSESSID именно так и происходит, то она в массиве не будет доступна. Для того чтобы добавить в $_REQUEST переменные из $_COOKIE, изменим ее на:
request_order = "GPC"
Далее сохрате файл и перезапустите Apache и вуаля - всё заработает!
p.s. а еще можно писать букву S, что означает SESSION
И не забывайте про то, чтобы глобально были доступны GET + POST + COOKIE + SESSION:
variables_order = "GPCS"