$_REQUEST[session_name()] оказался пуст. Что делать?
В своих проектах, где необходимо авторизовать пользователя, я пользуюсь старым добрым механизмом PHP сессий. На страницах которые требуется показывать как посетителям прошедшим авторизацию, так и нет, в самом начале кода применяю такую конструкцию:
1 | if (isset($_REQUEST[session_name()])) session_start(); |
В этом случае, в отличии от простого вызова функции session_start(), сессия стартанет только если браузером был прислан идентификатор сессии. Т.е. например если посетитель ранее успешно залогинился, то на странице будут доступны сессионные переменные, а если нет то вообще говоря сессия не будет здесь активна.
Благодаря тому что сессия не запускается без разбору, немного снижается нагрузка на сервер и решается проблема появления в поисковиках адресов страниц с переменной PHPSESSID в конце.
Недавно в результате переустановки php на локальной машине сессии перестали работать. Более детальное изучение показало, что с ними все нормально, а все дело в том что глобальный массив $_REQUEST просто напросто пуст, вернее никаких сессионных переменных в нем нет. Глянув файл php.ini , я обнаружил строки:
; This directive determines which super global data (G,P,C,E & S) should
; be registered into the super global array REQUEST. If so, it also determines
; the order in which that data is registered. The values for this directive are
; specified in the same manner as the variables_order directive, EXCEPT one.
; Leaving this value empty will cause PHP to use the value set in the
; variables_order directive. It does not mean it will leave the super globals
; array REQUEST empty.
; Default Value: None
; Development Value: “GP”
; Production Value: “GP”
; http://php.net/request-order
request_order = “GP”
Значение “GP” параметра request_order говорит о том, что в массив $_REQUEST будут заноситься только $_GET или $_POST, получается если переменная передается через $_COOKIE, а в нашем случаем с PHPSESSID именно так и происходит, то она в массиве не будет доступна. Для того чтобы добавить в $_REQUEST переменные из $_COOKIE, изменим ее на:
request_order = “GPС”
И все заработает.




Блин, два дня с этой же проблемой сидел, перерыл уже все мануалы и сайты, скрипты уже переписал, ничего не помогало, и вот наконец нашёл! Спасибо большое!)
Спасибо!!