Main Contents

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 |

3 Comments

  1. LjaDrbln February 14, 2008 @ 10:24 am

    Полезный trick, спасибо!

  2. Scratch February 14, 2008 @ 3:36 pm

    Это даже не трик. Это просто необходимый фикс.
    Оно, так сказать, проявилось.

    Кстати, Snap уже и снимки сайтов с ошибкой сделал :)

  3. Scratch February 20, 2008 @ 3:07 pm

    Обращайтесь :)

Leave a comment