ie9在重定向后丢失cookies

ie9在重定向后丢失cookies,cookies,redirect,internet-explorer-9,Cookies,Redirect,Internet Explorer 9,我有一个iframe: 向服务器发送post请求 服务器返回302并设置cookie 浏览器不会保存cookies,但会发布帖子(不知道为什么不获取,但这并不重要) 来自#3的cookie丢失 我找到了一个解决办法: Response.AddHeader("Pragma", "no-cache"); Response.AddHeader("Cache-Control", "no-cache"); 但这没用。 mb有人知道什么可以解决这个问题吗?您可能想了解为什么您的浏览器正在执行POST而不是

我有一个iframe:

  • 向服务器发送post请求
  • 服务器返回302并设置cookie
  • 浏览器不会保存cookies,但会发布帖子(不知道为什么不获取,但这并不重要)
  • 来自#3的cookie丢失
  • 我找到了一个解决办法:

    Response.AddHeader("Pragma", "no-cache");
    Response.AddHeader("Cache-Control", "no-cache");
    
    但这没用。
    mb有人知道什么可以解决这个问题吗?

    您可能想了解为什么您的浏览器正在执行POST而不是GET,因为这意味着您遗漏了一条重要信息。没有浏览器会

    在IE9中,如果标头允许(IE8及以下版本不会缓存重定向)

    您完全可以在302重定向上设置cookie。这里有两种可能性:

  • 您的cookie将被删除,因为您未能在响应中提供P3P头,表明您的隐私做法符合用户的愿望
  • 您的重定向响应是从用户的缓存而不是服务器中提取的,并且缓存的响应没有设置cookie

  • 考虑到您在IFRAME中遇到此问题,#1似乎更有可能出现。(请参阅)

    我不知道您是否了解这一点,但请确保您指示应用程序不要设置客户端cookie。在CF中,有一个应用程序参数“setClientCookies”,当将其设置为false时,可以确保您所描述的不会发生。(巧合的是,将其设置为“false”或“no”不起作用,因为CF通常也会将其识别为false。)

    要详细介绍EricLaw关于IE 9缓存重定向响应的回答,请查看此页面:

    另外,关于缓存的重定向响应,需要注意的一点是,确实没有简单的方法来清除它们。清除缓存和Cookie会使它们保持原位。有两种选择:

    • 进入IE9私人模式
    • 使用Fiddler清除Wininet缓存(在“工具”下)

    这篇文章可能有点晚了,但我最近处理了Grails应用程序的这个特殊问题。许多年前,在我创建的Java web应用程序中也出现了同样的问题,Internet Explorer阻止了Cookie(隐私设置)。为了允许Java web应用程序和JavaScript在Internet Explorer的主页或IFRAME中写入cookie,从web应用程序发送了隐私策略。Microsoft仍然支持名为的隐私策略格式。其他现代浏览器似乎不支持这种格式,但它确实有助于克服IE cookie问题。尽管担心IE10对P3P的支持,我还是通过严格的验证成功地测试了以下P3P设置

    1) 确定应用程序所需的类别。对于我的应用程序,正确操作需要交互式导航唯一ID类别。P3P规范网站上列出了紧凑型政策代码

    Category       Compact
    --------       -------
    interactive => INT
    navigation  => NAV
    uniqueid    => UNI
    
    2) 确定契约策略是否单独起作用。对于我的应用程序,紧凑的策略头就足够了。如果您需要策略文件,请查看以下示例文件:

    3) 下面的代码是一个非常简化的示例,但仍应说明要执行的步骤

    HttpServletResponse response = (HttpServletResponse) res;
    
    String policySettings = policyFileExists ? "policyref='" + policyFilePath + "', " : "";
    
    policySettings += "CP='INT NAV UNI'";
    
    response.setHeader("P3P", policySettings);
    

    您当然可以在其他技术中执行类似的步骤,例如PHP和ASP.NET。我希望这至少能帮助人们找到解决IE cookie问题的正确方向。

    您可能需要检查cookie上的Expire vs.Max Age设置。IE不会考虑Max Age(可能是更新的,如果没有到期),但他们会查看本地时间,并将其与过期日期进行比较。如果本地时间在将来,或者服务器的日期在过去,则cookie将被视为过期,并且不会在下一个请求中发送


    我还注意到,即使IE9会在开发者界面中告诉你它做了一个POSt,但它在302重定向后确实做了一个GET。值得注意的是,整个302系统有点混乱,网站应该是303和307,但无论如何。

    但为什么在ff、chrome和opera中都有cookie?他们用get保存cookie和重定向。我也遇到了同样的问题,并且通过添加一个P3P头(如上所述)轻松解决了这个问题。有关完整的解释,请参阅,但如果您只是想快速修复,请将此标题添加到302响应中:
    P3P:CP=“NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM”
    仅IE支持P3P。在添加标题之前,如前面的评论所示,您必须确保您使用该标题所做的声明是正确的,否则您可能会因对您的隐私做法提出虚假声明而被起诉。这篇文章似乎回答了这个问题: