Internet Explorer 8 не передает сессионный cookie для запроса ajax - PullRequest
6 голосов
/ 27 января 2009

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

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

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

Ответы [ 5 ]

8 голосов
/ 18 мая 2011

Вчера у меня была похожая проблема, и я нашел решение. Я надеюсь, что это поможет кому-то еще.

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

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

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

P3P: CP = "IDC DSP COR ADM DEVI TAIi PSA PSD IVAi IVDi CONI ЕГО НАШ ИНД CNT"

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

Затем, когда я погуглил эту «p3p abracadabra», я обнаружил следующий веб-сайт:

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

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

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

5 голосов
/ 04 марта 2009

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

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

0 голосов
/ 07 марта 2009

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

0 голосов
/ 04 марта 2009

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

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

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

0 голосов
/ 27 января 2009

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

См. идентификатор проходящей сессии в руководстве по PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...