2009-07-15 2 views
1

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

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

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

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

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

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

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

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

ответ

3

Я делал это с Sage Pay раньше. Вот что я сделал, это может помочь:

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

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

+0

Имея ту же проблему и реализовали аналогичное решение, но есть ли какие-либо последствия для безопасности при отправке идентификатора сеанса, подобного этому? –

0

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

У меня была аналогичная проблема в прошлом с IE и сеансами, но это было отслежено до тестовой области разработки с подчеркиванием в имени хоста (например, test_site.internal), что заставляет IE не сохранять файлы cookie правильно.

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

+0

Я использую стандартные сеансы php - например, устанавливая $ _SESSION, поэтому я думаю, что он должен быть основан на файлах cookie (нет идентификатора сеанса, добавленного к URL-адресу). В имени хоста нет подчеркиваний. Я взглянул на Charles Proxy и Fiddler2, но я не уверен, как интерпретировать их вывод о содержании сеанса? – BrynJ

+0

Посмотрите, какой файл cookie отправлен на ваш сайт перед платежным порталом, а затем. Вы также можете проверить удаление или выключение файлов cookie с помощью Set-Cookie. Используя Fiddler, вы также можете проверить идентификатор процесса и убедиться, что новый визит в том же процессе, чтобы исключить любые проблемы LCIE. – EricLaw

1

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

+0

Итак, что вы сделали, чтобы обойти это? – kingjeffrey

Смежные вопросы