这是一个更大的项目的一部分,但我已尽力简化我遇到的问题。这是最小化的情况:
foo=bar
路径example.com
/
https://example.com/page
通过HTTPS加载$("<img>", { src: "http://example.com/image" })
/image
的HTTP响应包含Set-Cookie
标题foo=baz
,用于相同的域和路径,应该覆盖第1步中的Cookie foo=bar
发送的,而不是与之一起发回的foo=baz
图像响应加载新页面后,会发送新的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中试过这个。我需要在所有浏览器中使用它,所以希望我能找到解决方案。
对不起,这已经结束了一段时间。任何建议都非常感谢!