【问题标题】:How to retain session-state from iframe in a pop-up?如何在弹出窗口中保留 iframe 的会话状态?
【发布时间】:2012-02-08 03:04:20
【问题描述】:

我正在为一个客户制作一个 Web 应用程序,该客户的客户希望将登录信息放在其网站上 iframe 内的应用程序中。成功登录后,我们希望在新的弹出窗口中打开应用程序,但似乎登录的会话仅保留在 iframe 内,而不保留在主窗口或弹出窗口中。这只是IE的问题,其他浏览器没有。

有没有可行的方法来实现这个?

流程是这样的:

  1. 用户访问客户网站(www.url1.com)
  2. 用户登录到应用程序,该应用程序位于 iframe(来自 www.url2.com)
  3. iframe 中的应用验证登录
  4. iframe 中的应用程序使用 window.open 来 以新的、单独的方式打开应用程序 窗口

编辑: Fiddler 表明 iframe 中发生的事情附加到一个 iexplore 进程,而主窗口中发生的事情附加到另一个。这显然是问题所在,可以解决吗?

【问题讨论】:

    标签: asp.net iframe popup session-state


    【解决方案1】:

    在从另一个域加载页面的 iframe 中设置 cookie 有时会导致一些奇怪的问题。如果 cookie 不起作用,很可能您的登录也不起作用。 为了在以前的情况下解决它,我必须做的是在 IIS / Code 中添加一个自定义的 http 标头,这突然使事情变得正常。

    示例 C# 代码:

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\"");
    }
    

    【讨论】:

    【解决方案2】:

    尝试使用Fiddler 检查登录页面(在 iframe 中)创建的 cookie 是否发送到新打开的弹出窗口。如果不是,则可能是 IE 中的一个设置阻止了这种情况的发生。

    编辑:要查看 Fiddler 中的 cookie,请转到 Inspectors 选项卡,然后转到 Headers。在请求标头(向上)中,您将看到从服务器发送到浏览器的 cookie。在响应标头(向下)中,您将看到从浏览器发送到服务器的 cookie(它们应该被发送回浏览器以进行后续请求)。

    【讨论】:

    • 如何验证 cookie 是否已发送到 Fiddler 中的窗口?
    猜你喜欢
    • 2010-10-20
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多