代码之家  ›  专栏  ›  技术社区  ›  BrynJ

IE8在使用支付网关时丢失会话数据

  •  1
  • BrynJ  · 技术社区  · 15 年前

    这是一个非常奇怪的问题,似乎有点间歇性(尽管它已经开始持续发生-可能是由于Windows更新?).

    我的代码以前在IE7中工作得很好,并且继续在Firefox、Chrome和其他浏览器(除了IE8)中工作。

    我正在设置一些会话数据,然后将用户传递到支付网关(protx/sage,如果这有什么区别的话),返回时需要引用我的会话数据。但我的会话数据消失了。我没有对支付网关显示做任何花哨的事情-没有iframes,只是在同一个浏览器窗口中把用户带到支付页面的链接。

    在阅读了一些内容之后,我尝试在我的页面中添加以下内容以强制兼容模式(显然这可能导致IE8丢失会话数据):

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

    这没有任何效果(但据我所知,支付页面不是强制兼容模式)。

    似乎有相当多的人说iframes导致了这种行为,但同样,没有iframes被使用。

    考虑到IE8中会话数据的持久性-与IE7和其他浏览器不同,当启动浏览器的新实例时,可以访问其他浏览器实例中的任何会话-我正在努力查看会话数据丢失的位置和方式。

    4 回复  |  直到 13 年前
        1
  •  3
  •   Dave Archer    15 年前

    我以前用圣人的工资做过这种事。以下是我所做的,可能会有所帮助:

    1。登记交易
    2。将当前会话ID保存到数据库(例如,在临时存储的事务中)
    三。将用户发送到Sage Pay进行支付
    4。Sage Pay通知您,您可以加载临时事务
    5。将会话ID作为重定向URL的查询字符串参数传递
    6.在重定向(完成页)上,检查请求中是否存在会话ID变量,如果存在,则在调用会话\u start()之前调用会话\u id($theidyougotfromquerystring)

    是的,我知道它不能直接回答你的问题。但也许这样做会有帮助?

        2
  •  1
  •   Brad Hoover    13 年前

    我也遇到了同样的问题,我跟踪到的问题是,如果您使用一个页面来生成会话,那么一旦生成了会话,您就需要执行一个标题(位置:…);调用ie会认为它需要在保护模式下生成一个新会话,并将删除上一个会话中的所有cookie。

        3
  •  0
  •   Richy B.    15 年前

    如何将会话存储在cookie或页面中的隐藏变量/表单字段中(如果是后者,则可能不会从支付网关返回)。

    在过去的IE和会话中,我也遇到过类似的问题,但跟踪到开发测试区域的主机名中有一个下划线(如test_site.internal),这导致IE无法正确保存cookie。

    你也可以试试 Charles Proxy 观察Internet Explorer和服务器之间的数据流,以查看您是否可以在何时停止传递所需的数据。

        4
  •  0
  •   user203185    15 年前

    这听起来像是一个p3p问题。 看到这个: http://support.microsoft.com/kb/323752/en-us 对于IE6和更高版本的浏览器。