IE8 теряет мои данные сеанса при использовании платежного шлюза - PullRequest
1 голос
/ 15 июля 2009

Это действительно странная проблема, которая, кажется, несколько прерывистая (хотя она начала постоянно происходить сейчас - возможно, из-за Центра обновления Windows?).

Мой код ранее хорошо работал в IE7 и продолжает работать в Firefox, Chrome и, по-видимому, в любом другом браузере, кроме IE8.

Я устанавливаю некоторые данные сеанса и затем передаю пользователя в платежный шлюз (Protx / Sage, если это имеет какое-то значение), который по возвращении должен ссылаться на мои данные сеанса. Но мои данные сеанса исчезают. Я не делаю ничего необычного с отображением платежного шлюза - никаких фреймов, просто ссылка, которая ведет пользователя на страницу оплаты в том же окне браузера.

После прочтения я попытался добавить следующее, чтобы принудительно включить режим совместимости на своей странице (поскольку, очевидно, это может привести к потере данных сеанса в IE8):

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

Это не имело никакого эффекта (но тогда, насколько я могу судить, страница оплаты не форсирует режим совместимости).

Кажется, довольно много людей говорят, что iframes вызывают такое поведение, но опять же, iframes не используются.

Учитывая постоянные данные сеанса в IE8 - в отличие от IE7 и других браузеров, когда инициируется новый экземпляр браузера, любой сеанс в другом экземпляре браузера доступен - я пытаюсь понять, где и как мой данные сеанса теряются.

Ответы [ 4 ]

3 голосов
/ 15 июля 2009

Я уже делал подобные вещи с Sage Pay. Вот что я сделал, это может помочь:

1. Зарегистрируйте транзакцию
2. Сохранить текущий идентификатор сеанса в базе данных (например, внутри временно сохраненной транзакции)
3. Отправьте пользователя в Sage Pay для оплаты
4. Sage pay уведомляет вас, и вы можете загрузить временную транзакцию
5. Передайте идентификатор сеанса в качестве параметра строки запроса для URL перенаправления
6. На перенаправлении (странице завершения) проверьте, есть ли в запросе идентификатор сеанса var, и если он есть, то вызовите session_id ($ theIdYouGotFromQueryString) перед вызовом session_start ()

p.s Да, я знаю, что это не дает прямого ответа на ваш вопрос. Но, может быть, это поможет?

1 голос
/ 10 мая 2011

У меня была та же проблема, и я обнаружил, что если вы используете страницу для генерации сеанса, а затем после ее создания вы делаете заголовок (Location: ...); IE вызова будет думать, что ему нужно создать новый сеанс в защищенном режиме, и удалит все куки из предыдущего сеанса.

0 голосов
/ 11 ноября 2009

Звучит как проблема P3P. См. http://support.microsoft.com/kb/323752/en-us для браузеров IE6 и более поздних версий.

0 голосов
/ 15 июля 2009

Как вы храните сеанс - в файле cookie или в виде скрытой переменной / поля формы на странице (если последняя, ​​то, вероятно, она не возвращается с шлюза оплаты).

В прошлом у меня была похожая проблема с IE и сессиями, но эта проблема была обнаружена в области тестирования разработки, имеющей подчеркивание в имени хоста (например, test_site.internal), из-за которой IE не может правильно сохранять куки.

Возможно, вы также захотите попробовать Charles Proxy , чтобы посмотреть поток данных между Internet Explorer и сервером (серверами), чтобы увидеть, сможете ли вы увидеть, в какой момент нужные вам данные перестают передаваться.

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