Internet Explorer 8 не передает cookie сеанса для запроса ajax

У меня есть простое приложение php, оно работает во всех браузерах, кроме IE8 beta 2, проблема возникает, когда я пытаюсь обновить поле таблицы с помощью Ajax-вызова (метод jQuery post). Используя отладчик IE8, я выясню, что IE8 не отправляет cookie сеанса, поэтому скрипты php перенаправляют на страницу входа вместо выполнения запрошенного действия.

Что я могу сделать, чтобы сделать эту работу.

Редактирование: я не упоминаю, что я использовал Code Igniter, поэтому я решил эту проблему, заменив реализацию сценария по умолчанию Code Igniter на native. Реализация сессии по умолчанию для воспламенителя использует cookie для хранения всех данных.

Вчера у меня была аналогичная проблема и нашел решение. Надеюсь, это поможет и другому.

Проблема: предположим, что в нем есть сайт http://www.somewebsite.com и IFRAME, который загружает php-файл с моего сервера, http://www.myserver.com/welcome.php . Веб-сайт загружался успешно, а также моя страница приветствия, и он показал что-то вроде «Hello Bob», поэтому он успешно нашел пользователя и запустил его.

Впоследствии мой JavaScript делал вызовы AJAX другому файлу PHP, и ответ был как бы в «неавторизованном» состоянии, поэтому данные SESSION полностью отсутствовали. После обновления страницы все работало правильно. И это происходило только в IE8!

Я думал, что проблема связана с отправкой файлов cookie сеанса на сервер, но когда я установил Fiddler , я обнаружил, что IE8 правильно отправляет файлы cookie, а также PHPSESSID, но сервер не мог обнаружить правильный объект SESSION. Еще одна странная вещь: 2-й сервер времени отправил следующий заголовок:

P3P: CP = «IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS НАШ ИНД CNT"

но первый раз нет. После добавления этого заголовка вручную в PHP-скрипте все работало как шарм!

Затем, когда я googled, что «p3p abracadabra», я нашел следующий веб-сайт:

http://adamyoung.net/IE-Blocking-iFrame-Cookies

Вывод: убедитесь, что вы отправляете заголовок на каждой странице, которая устанавливает cookie.

И это связано не только с комбинацией IE8 + PHP , то такая же проблема возникает в случае IE8 + ASP.NET , IE8 + JSP и т. Д.

У меня нет IE8 самостоятельно, но ваш файл cookie может быть заблокирован странными политиками безопасности Internet Explorer. Возможным обходным решением может быть использование P3P (который также является методом получения файлов cookie, работающих внутри IFRAME).

Создание правильной политики P3P может быть небольшой работой, но вы должны иметь возможность найти необходимую информацию на http://www.p3ptoolbox.org/

У меня была такая же проблема в IE8 RC1:

1) пользователь переходит на страницу входа и установлен пустой cookie сеанса
2) Пользователь входит в систему, и установлен валидированный cookie сеанса, а javascript открывает новое окно и закрывает текущее окно.
3) Открывается новое окно и содержит пустой куки-файл сеанса.
4) Пользователь перенаправляется на страницу входа в систему

Я изменил шаг 1, чтобы пустой cookie не был установлен – я отправляю только cookie сеанса, если он был проверен. Это поставило проблему для меня.

У меня возникли проблемы с получением IE8 для использования файлов SSL-сертификатов (PK12) в качестве средства авторизации. Если я хочу защитить каталог и заставить соответствующий веб-сертификат присутствовать в браузере перед предоставлением доступа. Он отлично работает с IE7 и всеми версиями Mozilla – просто не IE8. Это сделало систему диктовки моей жены бесполезной. Еще одна вещь, которую я заметил, это то, что когда он устанавливает cookie PHPSESSID, он перечисляет домен как .net, а не mydomain.net.

В качестве обходного пути вы можете вставить SessionID в качестве параметра на uri.

См. Идентификатор сеанса сеанса в руководстве по php.