为什么Safari发送错误的cookie值?

时间:2015-04-26 13:12:48

标签: javascript ajax cookies asynchronous cross-browser

我有一些代码可以定期增加一个由AJAX发送的cookie值中的计数器。这适用于Chrome / FF / IE,但在Safari中,我在服务器上收到的cookie值大约是JS值+10。

/* Example uses jQuery */
var counter = 0;
function handleInteraction(){
    counter++;
    createCookie("COUNTER", counter, 10);   
}

$('body').on('mousemove', function () {
    handleInteraction();
});

$('body').on('click', function () {
    console.log(counter);
    $.get("http://bryan.co.il/del.php");
    handleInteraction();
});

为什么会这样?

如果您有文件,请提供Safari文件。

1 个答案:

答案 0 :(得分:1)

我无法找到相关文档。

Safari似乎已经改变了XHR请求的实现 - 尽管http规范似乎允许这样做。

大多数浏览器在发送AJAX时,会同步读取cookie值,然后异步发送请求。

然而,

Safari甚至可以异步读取cookie值(即,只要它想要)。

以下是使用quirksmode.org中的createCookie演示的一些代码:

createCookie("TEST_COOKIE", "Before", 10);
var x = new XMLHttpRequest();
x.open("GET", location.href);
x.send();
createCookie("TEST_COOKIE", "After", 10);

在Chrome(等)中,服务器将在"之前接收"曲奇饼。在Safari(在Windows,Mac和iPad上测试),服务器将在之后收到!