Исчезновение сессии. Пропадают куки.

PHP-скриптЕсли вы еще не сталкивались с такими проблемами, то, думаю, столкнетесь в будущем. А самое неприятное в этом то, что определить и выловить такую проблему очень сложно.

Итак, симптомы. При серфинге по сайту пропадает сессия. Человек, установивший флажок «запомнить мой логин в куках», при серфинге по сайту вдруг оказываемся  разлогиненым. Вдруг пропадают установленные ранее куки.

Я очень долго пытался понять в чем проблема. Самое сложное в дебаге то, что получить акт уничтожения кука сложно, надо долго серфить по сайту и изучать содержимое $_. Короче, на вылов проблемы потратил кучу времени.

А результат поиска как обычно оказался банально прост. Дело в том, что в браузере ограничено количество куков на один домен. Когда лимит исчерпан, старые куки затираются при установке новых. Так же важно, что если не указать путь для кука явно, он будет равен текущему каталогу. Таким образом, если сайт содержит много разных каталогов в URL, установка кука в минимальном варианте (имя=значение) для каждого каталога даст отдельную куку. При этом, в $_COOKIES это, естественно, не заметно, а видно только в менеджере куков браузера.

Когда таки понимаешь, в чем проблема, начинаешь искать, кто же устроил куко-флуд. И что выясняется? Конечно внешние системы статистики. Коды счетчиков, написанные несколько лет назад не учитывают возможности mod_rewrite и длинной каталожной структуры URL. Там спокойно используется код document.cookie=”c=1”;, который и создает кук для текущего каталога. А надо просто на писать document.cookie=”c=1;path=/”; — и все будет ОК.

Так что будьте уверены — несистемное исчезновение куков и потери сессий (так как SID обычно хранится в куках) — явный признак наличия на сайте неправильной или излишней установки cookies.

P.S. Работы с куками из JS: