这是一个非常奇怪的问题,似乎有点间歇性(尽管它现在已经开始一直发生 - 可能是由于Windows Update?)。
我的代码以前在IE7中运行良好,并继续在Firefox,Chrome和IE8中的任何其他浏览器中工作。
我正在设置一些会话数据,然后将用户传递给支付网关(Protx / Sage,如果这有任何区别),返回时需要引用我的会话数据。但我的会话数据消失了。我没有对支付网关显示做任何想象 - 没有iframe,只是一个将用户带到付款页面的链接,在同一个浏览器窗口中。
完成了一些阅读后,我尝试在页面中添加以下强制兼容模式(显然这会导致IE8丢失会话数据):
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
这没有效果(但据我所知,付款页面并未强制执行兼容模式)。
似乎有不少人说iframe导致了这种行为,但同样没有使用iframe。
考虑到IE8中持久会话数据的持续性 - 与IE7和其他浏览器不同,当启动浏览器的新实例时,浏览器的另一个实例中的任何会话都可以访问 - 我很难看到我的位置和方式会话数据正在丢失。
答案 0 :(得分:3)
我以前用Sage Pay做过这种事。这就是我所做的,它可能会有所帮助:
1.注册交易
2.将当前会话ID保存到数据库(例如,在临时存储的事务内)
3.将用户发送给sage pay以进行付款
4. Sage pay通知您,您可以加载临时交易
5.将会话ID作为重定向URL的查询字符串参数传递
6.在重定向(完成页面)上检查请求中是否存在会话ID var,如果有,则在调用session_start()之前调用session_id($ theIdYouGotFromQueryString)
是的,我知道它并没有直接回答你的问题。但也许这样做会有所帮助吗?
答案 1 :(得分:1)
我遇到了同样的问题,我追踪到的是,如果你使用一个页面来生成会话,然后一旦生成它就会做一个标题(位置:...);调用IE将认为它需要在受保护模式下生成一个新会话,并将丢弃前一个会话中的所有cookie。
答案 2 :(得分:0)
如何存储会话 - 在cookie中或作为页面中的隐藏变量/表单字段(如果是后者,则可能不会从支付网关返回)。
过去我在IE和会话中遇到过类似的问题,但这被追溯到主机名中有下划线的开发测试区域(例如test_site.internal),导致IE无法正确保存cookie。 / p>
您可能还想尝试Charles Proxy来观察Internet Explorer和服务器之间的数据流,看看您是否可以看到您需要的数据何时停止传递。
答案 3 :(得分:0)
这听起来像是一个P3P问题。 请参阅:http://support.microsoft.com/kb/323752/en-us适用于IE6及更高版本的浏览器。