PHPSESSID, и как с ним бороться.
February 13, 2008 by Scratch
Язык PHP имеет встроенные функции для работы с сессией. Но даже банальная работа с сессией имеет свои подводные камни. Возьмем, к примеру, PHPSESSID. Эта переменная используется для того, чтобы указать, какой id сессии нужно использовать. Да, многие разработчики отключают использование этого параметра вообще (то есть, используется только cookie), но если этот параметр включен…
… то могут возникнуть неприятные ощущения при общении с заказчиком. Особенно, если сайт начинает в самый неожиданный момент глючить.
Для начала я приведу пример этой ошибки.
Попробуйте нажать на эту специально подготовленную ссылочку (DkLab). Или на еще одну ссылку (ItPress)…
Или даже сюда (Dmytro Shteflyuk)
Что вы видите? Я подозреваю, что вы видите ошибку сессии и несколько ошибок отправки хидеров. Это нормально
Мне на подобную ошибку на одном из сайтов указал заказчик. Причниа этой ошибка — мы заставляем php использовать неверный session id, и — поскольку он неверный — возникает ошибка. Все бы ничего, но нормальный айдишник для сессии создается только начиная с версии 5… А терять данные сессии — это нехорошо. И прятать голову в песок, ставя знак собачки перед session_start() (или запрещая вывод ошибок) — тоже не очень хорошо.
Поэтому эту ошибку будем решать, тем более что решается она более чем элементарно.
Вот решение:
if (isset($_REQUEST[session_name()])) { if (!preg_match('/^([a-zA-Z0-9])+$/', $_REQUEST[session_name()])) { // Here is session id change session_id(md5(rand(0,99999) . time() . rand(0,9999))); } }
Просто вставляем этот код до старта сессии, и любой неправильный айдишник будет заменен на достаточно хороший (по крайней мере, соответствующий требованиям php).
Filed under: Tips and tricks |
Полезный trick, спасибо!
Это даже не трик. Это просто необходимый фикс.
Оно, так сказать, проявилось.
Кстати, Snap уже и снимки сайтов с ошибкой сделал
Обращайтесь