IE6 не устанавливает cookies PHP 06.10.2008

cookie_php.jpg

Обнаружил, что IE6 не принимает пароль для WordPress страницы, установленный в ‘Защитить страницу паролем‘. После ввода пароля, IE6 редиректится на ту же страницу, но поле для ввода пароля отображается по-прежнему. В следующей версии Internet Explorer 7 – все ок, пароль принимается и отображается содержимое защищенной страницы, в остальных браузерах тоже все работает. Полез смотреть в wp-pass.php, куда WordPress редиректит после ввода пароля – все варианты, которые я пробовал – тсчетны ослик 6 уперся и не воспринимал ни один из них.

Дальше начал смотреть в сторону PHP, setcookie, $_COOKIE. Оказалось, что ослик может не устанавливать кукисы (а соответственно и сессии) по одной из следующих причин:

  1. Особенная реализация (читай: через одно место :) ) P3P в IE 6, лечиться отправкой специального HTTP заголовка :
    header('P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
    
    Этот способ может и не сработать.
  2. В имени устанавливаемой кукис переменной присутсвует _ (знак подчеркивания), способ лечения – удаляем знак подчеркивания в имени переменной.
  3. Не правильное вычисление даты окончания (timeout) cookies. Если сервер находится в другом часовом поясе, по сравнению с клиентом, то в IE6, после вычисления разницы времени, получается просроченная дата кукиса . В правильных браузерах время перед расчетом приводиться к одной отправной точке – UTC. Способ лечения – коррекция времени на клиенте по NTP.

Эти способы мало пригодны, если сайт отлаживается на standalone IE (параллельно установлено несколько IE).

Цитата
Сегодня будет непросто, завтра будет еще хуже, но послезавтра все будет прекрасно.
Джек Ма
Категории
Архив