【问题标题】:Loses session state in iframe, but not in pop-up window在 iframe 中丢失会话状态,但在弹出窗口中没有
【发布时间】:2010-10-20 01:41:48
【问题描述】:

我们正在开发一个网上商店,并使用第三方 UI 处理付款。

我们选择在 iframe 内向外显示结帐页面内显示支付 UI,尽管(我们现在意识到)支付解决方案提供商建议使用顶级窗口。

现在发生的情况是,在 IE7/IE8 中,支付 UI 在第一次回发(iframe 内)时会丢失会话状态,而在 Firefox 中,它可以正常工作。我们观察到支付 UI 是使用 ASP.NET 开发的。

我的印象是,就服务器而言,从 iframe 引用与从顶级窗口引用没有区别,但显然有。

有人知道吗? iframe 做了什么可能会对支付服务器产生影响,导致其丢失会话状态?

会不会(我突然意识到)是 cookie 处理方面的差异?也许更严格的安全性?

【问题讨论】:

    标签: asp.net iframe session-state


    【解决方案1】:

    可能是这个原因造成的:

    Internet Explorer 6 引入了对隐私首选项平台 (P3P) 项目的支持。 P3P 标准指出,如果 FRAMESET 或父窗口引用 FRAME 或子窗口内的另一个站点,则子站点被视为第三方内容。 Internet Explorer 使用默认的 Medium 隐私设置,静默拒绝从第三方网站发送的 cookie。

    http://support.microsoft.com/kb/323752/en-us

    曾经听有人说IFrame其实是IE的一个新实例,但显然要复杂一些。

    【讨论】:

    • 您可以通过确保您和支付提供商都定义了 P3P 声明来解决此问题:这将允许 IE 接受第三方 cookie - 当 IE 6 出现广告时必须做类似的事情从远程广告服务器在 IFrame 中投放。
    【解决方案2】:

    您可能会发现 this article by Milan Negovan 有助于解释为什么框架页面会获得单独的会话 ID。文章还谈到了上面 Gerrie Schenck 提到的 P3P 解决方案。

    【讨论】:

    • 一篇文章的链接现在似乎正在重定向到一个亚洲语言网站。不要点击。
    【解决方案3】:

    所以你的代码/网站的结构应该是这样的:

    1. 站点 A 的第 1 页有一个显示站点 B 的 iframe
    2. iframe 更新并现在显示站点 A 的第 2 页

    当你右键点击 iframe 的内容时,你可以验证该 url 是否对应于站点 A?

    如果您进行调试,第 2 页是否会按预期触发断点?

    【讨论】:

    • 没有。站点 A 页面 1 一直显示。站点 A 页面 1 内部是一个 iframe,它显示站点 B 页面 1。站点 B 页面 1 回发(在 iframe 内)到站点 B 页面 2。现在站点 B 页面 2 没有会话状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2021-03-03
    • 2011-03-31
    • 1970-01-01
    • 2019-07-18
    • 2016-05-30
    相关资源
    最近更新 更多