在请求Cookie标头中发送的子域cookie,但在IE JavaScript的document.cookie中不存在

时间:2009-12-18 10:11:47

标签: javascript cookies cross-browser

我遇到了一个奇怪的问题,即正在发送和接收的cookie但是Internet Explorer上的JavaScript无法访问。 Chrome,Firefox,Opera和Safari JavaScript都很好。

  1. 发布到“http://wp.abc.example.com/content/sv2.cgi?id=1234”,响应设置Cookie,问题302重定向:

    HTTP/1.0 302 Moved Temporarily
    Location: http://members.abc.example.com/abc/members/0912/07/news01.html
    Set-Cookie: AID=1495763b4fc6d5f4290e2074ab1092f7; expires=Tue Feb 16 09:33:03 2010 GMT; path=/abc/members/0912/07/news01.html; domain=abc.example.com; ;
    Set-Cookie: LEADENDDATE=20091218; expires=Tue Feb 16 09:33:03 2010 GMT; path=/abc/members/0912/07/news01.html; domain=abc.example.com; ;
    
  2. 浏览器请求目标页面,包括刚刚发送的cookie。

    GET /abc/members/0912/07/news01.html HTTP/1.1
    Cookie: AID=1495763b4fc6d5f4290e2074ab1092f7; LEADENDDATE=20091218;
    Host: members.abc.example.com
    
  3. 运行“javascript:alert(document.cookie);”在浏览器地址栏中。

  4. 在IE浏览器和IE浏览器上,不存在cookie。其他浏览器都很好。这适用于IE6,7和8。

  5. 总而言之,

    “wp.abc.example.com”在“abc.example.com”上设置一个cookie,该cookie在“members.abc.example.com”的请求中发送给服务器,但在JavaScript上不可见那页。

    为什么?

    我想也许不是“abc.example.com”,应该在“.abc.example.com”上设置cookie以允许子域匹配,但即便如此,它也会在“members.abc.example.com中发送” “请求标题。

    基本上它就像在cookie上设置“HttpOnly”一样,即使从上面显示的Set-Cookie标头示例中,也不包括该标志。额外的“;”也许有一些影响?

1 个答案:

答案 0 :(得分:7)

一段时间以来,Eric Law写了a good article on IE's various cookie-handling quirks。他回答的问题之一似乎可能适用于您的场景:

  

问题8:HTML DOM document.cookie属性是否有任何限制?

     

A: [...]

     

此外,由于底层WinINET InternetGetCookie实现中存在一个模糊的错误,如果使用包含文件名的路径属性设置,IE的document.cookie将不会返回cookie。
   [...]

请注意,您的路径执行包含文件名:

  

Set-Cookie:AID = 1495763b4fc6d5f4290e2074ab1092f7;到期= 2010年2月16日星期二09:33:03 GMT;路径= / ABC /构件/ 0912/07 /的 news01.html ;域= abc.example.com; ;
  Set-Cookie:LEADENDDATE = 20091218;到期= 2010年2月16日星期二09:33:03 GMT;路径= / ABC /构件/ 0912/07 /的 news01.html ;域= abc.example.com; ;

我建议您尝试使用无文件名路径设置Cookie,看看是否有帮助......