在JavaScript中创建新的DOM元素后强制document.cookie更新

时间:2014-04-29 14:39:10

标签: javascript jquery ajax cookies xmlhttprequest

这是一个更大的项目的一部分,但我已尽力简化我遇到的问题。这是最小化的情况:

  1. 浏览器已为域foo=bar路径example.com
  2. 存储Cookie值/
  3. 网页https://example.com/page通过HTTPS加载
  4. 页面加载后,使用jQuery&#39; $("<img>", { src: "http://example.com/image" })
  5. 动态加载图像
  6. 服务器对/image的HTTP响应包含Set-Cookie标题foo=baz,用于相同的域和路径,应该覆盖第1步中的Cookie
  7. 网页使XHR成为其他页面
  8. 问题:步骤5中的请求是使用 Cookie值foo=bar发送的,而不是与之一起发回的foo=baz图像响应
  9. 加载新页面后,会发送新的Cookie值foo=baz。问题是浏览器的cookie存储(因此document.cookie)似乎只是在我的XHR之后的某个时刻更新。它显然正在更新,因为新的Cookie值是在新页面加载时发送的,但在我的XHR时并不存在。

    我已尝试使用超时和waitForImages来确保在图像正确加载后发生XHR。该图像还带有必要的三个响应头,以确保它永远不会被缓存。

    某些代码可能更能说明我尝试做的事情:

    $(function() {
      // document.cookie contains foo=bar (*)
    
      // The HTTP response for the /image contains a Set-Cookie for foo=baz
      $("<img>", { src: "http://example.com/image" }).waitForImages(function() {
    
        // The HTTP request for /some_other_page is sent with foo=bar, not foo=baz
        $.get("/some_other_page", function() {
          // ...
        });
      });
    });
    
    // if we reload the page, document.cookie contains foo=baz at the line marked (*)
    

    我是否想做一些不可能做到的事情?请注意,步骤3中的URL是通过HTTP加载的,而不是HTTPS,因此XHR不是此选项,因为浏览器会阻止它。我的问题是:我可以根据我在JavaScript中创建的<img>标记的响应来强制更新document.cookie吗?

    我只在Firefox 28.0中试过这个。我需要在所有浏览器中使用它,所以希望我能找到解决方案。

    对不起,这已经结束了一段时间。任何建议都非常感谢!

0 个答案:

没有答案