我有一个iframe:
我找到了一个解决方法:
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Cache-Control", "no-cache");
但它没有帮助。 有没有人知道什么可以解决这个问题?
答案 0 :(得分:11)
您可能想要了解浏览器为什么要进行POST而不是GET,因为这意味着您遗漏了一条重要的信息。没有浏览器会follow a HTTP/302 redirect with a POST。
在IE9中,redirection responses are cached如果标头允许(IE8及以下版本不会缓存重定向)。
您绝对可以在302重定向上设置Cookie。这里有两种可能性:
鉴于您在IFRAME中遇到此问题,#1似乎更有可能。 (见Quick Look at P3P)
答案 1 :(得分:2)
这篇文章可能有点晚了,但我最近为Grails应用程序处理了这个特殊问题。许多年前,我创建的Java Web应用程序中出现了同样的问题,其中Internet Explorer阻止了cookie(隐私设置)。为了允许Java Web应用程序和JavaScript在主页中编写cookie或在Internet Explorer中编写IFRAME,从Web应用程序发送了隐私策略。 Microsoft仍支持名为Platform for Privacy Preferences (P3P)的隐私策略格式。其他现代浏览器似乎不支持此格式,但它确实有助于克服IE cookie问题。尽管担心IE 10支持P3P,但我已成功通过严格验证测试了以下P3P设置。
1)确定您的应用程序所需的类别。对于我的应用程序, 交互式 , 导航 和 uniqueid < / strong>正确操作需要类别。 Compact Policy代码列在P3P规范网站
上Category Compact
-------- -------
interactive => INT
navigation => NAV
uniqueid => UNI
2)确定紧凑的政策是否有效。对于我的应用程序,紧凑的策略标题就足够了。如果您需要政策文件,请在此处查看一些示例文件:http://p3pbook.com/examples.html。
3)下面的代码是一个非常简化的示例,但仍应说明要执行的步骤。
HttpServletResponse response = (HttpServletResponse) res;
String policySettings = policyFileExists ? "policyref='" + policyFilePath + "', " : "";
policySettings += "CP='INT NAV UNI'";
response.setHeader("P3P", policySettings);
您当然可以在其他技术中执行类似的步骤,例如PHP和ASP.NET。我希望这至少可以帮助人们找到解决IE cookie问题的正确方向。
答案 2 :(得分:1)
要扩展EricLaw关于IE 9缓存重定向响应的答案,请查看此页面:
http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx
此外,有关缓存重定向响应的一点需要注意的是,确实没有简单的方法来清除它们。清除缓存和cookie会使它们保持原位。有两个选项:
答案 3 :(得分:0)
我不知道你是否想过这个,但请确保你指示你的应用程序不设置客户端cookie。在CF中,有一个应用程序参数'setClientCookies',当它设置为false时,确保你所描述的内容不会发生。 (巧合的是,将其设置为'false'或'no'不起作用,因为CF通常也认为这是假的。)
答案 4 :(得分:0)
您可能需要检查Cookie上的“过期与最大年龄”设置。 IE不会考虑Max-Age(如果没有Expire,可能会更新吗?),但他们会查看当地时间并将其与Expire日期进行比较。如果当地时间在将来,或者服务器具有过去的日期,则该cookie将被视为已过期,并且不会在下一个请求中发送。
我还注意到,即使IE9会在开发人员界面中告诉你它执行了一个POSt,它确实在302重定向后进行了GET。作为一个注释,整个302的事情有点混乱,网站应该303和307,但无论如何。