我有一个我从脚本调用的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); }
});
答案 0 :(得分:17)
将AJAX请求发送到服务器上的无cookie子域。因此,您的应用程序是www.mydomain.com,并且api.mydomain.com提供了ajax请求,您从未设置过cookie。使用图像等静态文件也是一个好主意......
的“使用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的新子域。