【问题标题】:Iframe 3rd party cookie issue in internet explorerInternet Explorer 中的 iframe 3rd 方 cookie 问题
【发布时间】:2010-01-06 17:10:35
【问题描述】:

我正在构建一个 ASP.NET 3.5 应用程序,其中我有一个页面,该页面在 iframe 的不同域中加载另一个页面。下面是 Default.aspx 页面:

<asp:Content ID="Content1" ContentPlaceHolderID="mainContent" runat="server">
    <iframe src="isite.aspx" runat="server" width="100%" height="100%" scrolling="auto">

    </iframe>
</asp:Content>

下面是iframe页面isite.aspx

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>Untitled Page</title>
    </head>
    <body style="margin: 0; text-align: center;">
        <form id="Form1" name="frmSubmit" action="https://mysite.com/Login.asp"
        method="POST" runat="server">
        <span style="font-family: Arial">
            <asp:ImageButton ID="ImageButton1" runat="server" PostBackUrl="https://mysite.com/Login.asp" ImageUrl="/ajax-loader.gif" /> Please wait...
    <br />
        </span>
        <input type="hidden" name="txtUserName" size="30" maxlength="50" value="admin"
            onkeypress="Javascript:CheckKeyPress('ID')"/>
        <input type="hidden" name="pwdPassword" size="30" maxlength="25" value="password"
            onkeypress="Javascript:CheckKeyPress('P')"/>
        </form>
    </body>
    </html>

下面是 isite.aspx.cs 页面:

    protected void Page_Load(object sender, EventArgs e)
    {
        Page.ClientScript.RegisterStartupScript(Page.GetType(), "click", "<script language=javascript>document.getElementById('" + ImageButton1.ClientID + "').click();</script>");
    }

这在 Firefox、Safari 和 Chrome 中运行良好,但在 IE 7 或 8 中运行良好。在 IE 中它给了我一个 HTTP 500 错误页面。在对其进行了一些研究后,我认为这是 IE 中的 cookie 问题,并尝试了以下解决方案:

  1. 将以下代码添加到 Global.asax:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
    HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
    }

  2. 将以下代码行添加到 Page_Init 和 Page_Load 事件中

    HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

这些解决方案都不适合我。我错过了什么?

【问题讨论】:

    标签: asp.net internet-explorer cookies iframe


    【解决方案1】:

    如果您希望子帧能够使用 cookie,则添加 P3P 标头是最佳做法,但您应该首先查看服务器日志以找出生成 HTTP/500 的原因,因为它是服务器/framework 引发错误。

    您可能还想关闭 IE 中的友好错误(请参阅工具/Internet 选项/高级)

    【讨论】:

    • 500 错误背后的原因是 IE 试图定位它无法找到的会话 cookie。相同的代码在非 IE 浏览器中工作,我使用 firebug 工具检查了响应标头,下面是响应 Cache-Control private Content-Type text/html; charset=utf-8 服务器 Microsoft-IIS/7.5 p3p CP="CAO PSA OUR", CP="NOI DSP COR NID ADM DEV PSA OUR IND UNI PUR COM NAV INT STA" X-AspNet-Version 2.0.50727 X-Powered - By ASP.NET Date Thu, 07 Jan 2010 07:18:46 GMT Content-Length 8601 正如你所看到的 P3P 信息在标题中,但它在 IE 中仍然无效
    • 非常感谢任何帮助或建议
    • 不,这不正确。 HTTP/500 是服务器错误,而不是客户端错误。 IE 在缺少 cookie 时不会抛出错误。在 Fiddler2 中观察您的流量并查看来自服务器的响应标头是什么;把它们贴在这里。另外,看看 HTTP/500 消息的文本是什么。
    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2010-09-11
    • 1970-01-01
    • 2012-12-12
    • 2012-08-27
    相关资源
    最近更新 更多