ie9在重定向后丢失cookies
我有一个iframe: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而不是
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Cache-Control", "no-cache");
但这没用。
mb有人知道什么可以解决这个问题吗?您可能想了解为什么您的浏览器正在执行POST而不是GET,因为这意味着您遗漏了一条重要信息。没有浏览器会 在IE9中,如果标头允许(IE8及以下版本不会缓存重定向) 您完全可以在302重定向上设置cookie。这里有两种可能性:
考虑到您在IFRAME中遇到此问题,#1似乎更有可能出现。(请参阅)我不知道您是否了解这一点,但请确保您指示应用程序不要设置客户端cookie。在CF中,有一个应用程序参数“setClientCookies”,当将其设置为false时,可以确保您所描述的不会发生。(巧合的是,将其设置为“false”或“no”不起作用,因为CF通常也会将其识别为false。)要详细介绍EricLaw关于IE 9缓存重定向响应的回答,请查看此页面: 另外,关于缓存的重定向响应,需要注意的一点是,确实没有简单的方法来清除它们。清除缓存和Cookie会使它们保持原位。有两种选择:
- 进入IE9私人模式
- 使用Fiddler清除Wininet缓存(在“工具”下)
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。在添加标题之前,如前面的评论所示,您必须确保您使用该标题所做的声明是正确的,否则您可能会因对您的隐私做法提出虚假声明而被起诉。这篇文章似乎回答了这个问题: