防止在AJAX请求上发送Cookie

时间:2010-05-13 18:13:21

标签: ajax jquery

我有一个我从脚本调用的Web服务,但不需要存储在cookie中的任何信息。无论何时我向服务发出请求,cookie都会随之发送。我知道默认情况下,cookie是通过HTTP请求发送的,但有没有办法覆盖该行为而不发送cookie?

简而言之,我发出了这样的请求:

$.ajax({
    type: "POST",
    cache: false,
    url: url,
    data: data,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(response) { successFunc(response); },
    error: function(xhr) { errorFunc(xhr); }
});

5 个答案:

答案 0 :(得分:17)

将AJAX请求发送到服务器上的无cookie子域。因此,您的应用程序是www.mydomain.com,并且api.mydomain.com提供了ajax请求,您从未设置过cookie。使用图像等静态文件也是一个好主意......

请参阅http://developer.yahoo.com/performance/rules.html

的“使用Cookie的免费域名”部分

答案 1 :(得分:7)

另一种方法是在做$ .ajax之前:
1.使用javascript从您的域的浏览器获取cookie(将它们保存在全局变量中)
2.使用浏览器中的javascript删除您域名的Cookie 3.执行$ .ajax调用
4.将cookie(来自全局变量)放回浏览器中。

如果您根本不需要域中的cookie,只需删除它们(因此请跳过1.和4.)。

答案 2 :(得分:1)

实际发送带有跨域Ajax调用的cookie需要withCredentials标志。

请参阅:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

将其设置为false将阻止发送cookie。

对于同源请求,您需要按照此处提到的其他答案进行操作。

答案 3 :(得分:0)

你说浏览器发送匹配(路径+域+会话)cookie以及HTTP请求是正确的。这对于cookie机制起作用至关重要。

难道你不能简单地读取cookie吗?

此外,最初设置cookie时,您可以设置哪个目录(及其子目录)可以访问cookie。

例如,如果您将cookie设置为仅在/ foo / bar /中读取,则位于/whatever/ajaxHandler.php中的文件无法看到那些cookie。

检查出来:http://us.php.net/setcookie

虽然我不确定您是否使用PHP,但它可能是您的良好起点。

答案 4 :(得分:-1)

不,cookie将始终发送。

您可以将Cookie的发送方式发送到浏览器,并在其上使用http标记,这意味着它们不会通过javascript发送。

或(许多网站使用),创建一个您从未发送任何cookie的新子域。