【问题标题】:IE 9 set cookie and redirect failsIE 9 设置 cookie 和重定向失败
【发布时间】:2011-10-13 10:14:15
【问题描述】:

在我的 spring-application 中,我尝试设置一个 cookie,然后重定向到读取 cookie 的页面。重定向到另一个网页有效,但设置 cookie 仅在 IE9 中失败。

Cookie cookie = MyCookieHandler.createCookie(parameters, domain);
response.addCookie(cookie);

重定向是通过购买设置 ModelAndView 来处理的

modelView = new ModelAndView("redirect:" + getCallback());

正如我所说,在 FF3+、Chrome 和 IE7/IE8 中运行良好。我的应用有什么问题?有什么建议吗?

【问题讨论】:

  • 使用 Fiddler 捕获 302 的 HTTP 响应标头并在此处发布。
  • 你的 createCookie 方法是做什么的?
  • HTTP/1.0 302 Moved Temporarily Date: Wed, 27 Jul 2011 09:27:12 GMT Location: /login/index.html Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 20 Content-Type: text/html; charset=ISO-8859-15 X-Cache: MISS from ham-dmz-mns1.mobilcom.de X-Cache-Lookup: MISS from ham-dmz-mns1.myserver.de:8080 Via: 1.0 ham-dmz-mns1.myserver.de:8080 (squid/2.7.STABLE5) Connection: keep-alive Proxy-Connection: keep-alive
  • 但是失败的不是重定向,而是设置cookie。在域 xxx.google.com 上,我们为 google.com 设置了 cookie,而在 yyy.google.com 上,cookie 不可用。这很疯狂,因为在 FF、Chrome 等中它运行良好,只有 IE9 失败...

标签: java spring internet-explorer cookies redirect


【解决方案1】:

我在使用 IE 8、9 和 10 时遇到了类似的问题,并且缓存控制标头没有帮助。经过进一步研究,我不得不放置一个P3P privacy policy(来自较旧的Java Web 应用程序),并且IE 正确存储了cookie,而没有缓存控制标头。

这种策略格式目前仅受 Internet Explorer 支持,但它提供了管理 cookie 的唯一可靠方法,无需手动更改 IE 隐私设置。 P3P 隐私策略有两个部分:策略文件和紧凑策略头。紧凑的策略标头似乎运行良好。为了简洁起见,P3P 的不同类别在标题中都有紧凑的代码,例如导航 => 资产净值。至少,我会从紧凑策略的 INT、NAV 和 UNI 代码开始。

这里有两个如何传回标头的示例:

Grails/Java:
    response.setHeader("P3P", "CP='INT NAV UNI'");

PHP:
    header('P3P:CP="INT NAV UNI"')

【讨论】:

  • 确认中。这个特定的 P3P 标头为我解决了 IE11 (Edge) 的“未在 POST 重定向上设置 cookie”问题。没有其他任何改变。当此方法开始失败时,回退到基于 META 标记的刷新/重定向:webmaster.iu.edu/tools-and-guides/maintenance/…
【解决方案2】:

经过一些尝试,我添加了以下内容:

response.addHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "no-cache");

现在它对我有用,不知道这是否是正确的解决方案,也不知道为什么缓存在 IE9 中有所不同,但现在它可以工作了......谢谢大家。

【讨论】:

    【解决方案3】:

    我之前遇到过重定向失败的问题。奇怪的是,它似乎在 Firefox 中有效,但在 IE 中却失败了。解决方案是在重定向语句中添加一个完整的 URL,即

    http://foo.com/new_site.html
    

    而不是

    new_site.html
    

    【讨论】:

    • 然后尝试在它前面添加http://。这似乎是一个 IE 安全设​​置问题。
    • 哦,对不起,它是http://yyy.google.com(被评论框忽略了),即使在没有 http(s) 的情况下设置了回调,我的应用也会添加这个。
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多