Довелось мне на днях заниматься переносом интернет-магазина «Климатик» на новый движок с сохранением оригинального дизайна.
И пришлось столкнуться с ситуацией, когда Internet Explorer терял данные сессии. Но обо всем по порядку…
При работе с корзиной заказов был выбран вариант с AJAX-установкой id заказанного товара с сессионную переменную PHP, с последующим асинхронным обновлением блока, информирующего о наличии товара в корзине.
По привычке работоспособность кода стал проверять на минимальном комплекте браузеров: Mozilla FireFox, Google Chrome, Opera, Safari ну и, конечно же, Internet Explorer. На моей рабочей Windows 7 Microsoft повелела иметь только девятую версию своего браузера. Восьмая и седьмая даже в подписи к ссылке для скачивания с сайта Microsoft заявляли, что они предназначены для Windows XP. Так оно и вышло — и «семерка», и «восьмерка» отказались устанавливаться на мою Windows 7.
Ну да ближе к делу… Во всех браузера корзинка работала отлично. Ну.. в смысле так, как я задумал. Но, открыв работу в Internet Explorer 9, я с досадой обнаружил, что в нем мой код не работает. После добавления товара в корзину блок-информер состояния корзины упорно утверждает, что товаров в корзине нет. Привычно накидал по ходу скрипта строчек с выводом сервисных сообщений в контрольных точках. Все идеально. Информация о товаре ложится в PHP-сессию, но обратно уже не извлекается!
Не понимая причин такого поведения, сделал вывод в броузер всего суперглобального массива $_SESSION. И тут заметил одну особенность: в числе всех переменных массива, отображается и переменная session_id. Так вот, при обновлении страницы идентификатор сессии, т.е. значение переменной $_SESSION[‘session_id’] в IE каждый раз менялось!
Что я только не предпринимал, чтобы избавиться от этого! Перечислять все мои безуспешные попытки исправить ситуацию нет ни желания, ни смысла. Потому опишу только ту, которая принесла успех. Но сначала пару слов о том, что предшествовало этому. Для тестирования, я выложил работу на свой хостинг, создав для этих целей поддомен на своем домене. Моя команда отчиталась, что у них все работает под всеми браузерами. Правда, все работали из-под Windows XP и использовали седьмые и восьмые версии Internet Explorer. Ужели глюк именно с «девяткой»?
Уже отчаявшись найти действенное решение, из последних сил перебирая варианты запроса Гуглю и Яндексу на поиск решения похожей проблемы, наткнулся на один пост (к сожалению адрес этого ценнейшего поста я, в суматохе, не догадался сохранить, а искать его в журнале по прошествии многих дней банально нет времени). Так вот, в этом посте, автор сообщал, что им замечена странная нелюбовь движка PHP 5, к доменам, имеющим в своем имени символ подчеркивания (т.е. «_»). Эта нелюбовь проявляется, в том числе и в механизме работы сессий.
Тут нужно признаться, что для эффективной работы, локальные копии магазина я обозвал climatic (оригинал) и, угадайте… Конечно же climatic_new (мою, на новом движке). Дрожащими руками переименовал локальный домен в climaticnew, перезапустил Apache и… О, чудо!!! Ошибка исчезла. Точнее мой Internet Explorer 9 перестал порождать новые session_id, а начал послушно пользоваться одной (точнее двумя, но это к нашему вопросу не имеет отношения). Проблема была решена.
Надеюсь, что мой опыт сможет помочь кому-то сэкономить толику времени при решении аналогичной проблемы.
Похожие записи
2 комментария
Спасибо. Оч помогло. У меня был сайт на MySQL, я его на Couchbase переделал. Ну и назвал его sitename_couchbase чтобы с MySQL не путать. Убил тучу времени пока не прочитал ваш пост. Действительно все заработало после удаления подчеркивания.
Да не за что. За тем и задумывался сайт, чтобы делиться опытом.
Оставить комментарий или два