防止根据AJAX请求发送Cookie

防止根据AJAX请求发送Cookie,ajax,jquery,Ajax,Jquery,我有一个从脚本调用的web服务,但它不需要存储在cookie中的任何信息。每当我向服务发出请求时,cookie都会随服务一起发送。我知道默认情况下cookie是通过HTTP请求发送的,但是有没有任何方法可以覆盖该行为而不发送cookie 简而言之,我的请求如下: $.ajax({ type: "POST", cache: false, url: url, data: data, contentType: "application/json; charset

我有一个从脚本调用的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); }
});

您的说法是正确的,浏览器将匹配(路径+域+会话)cookie与HTTP请求一起发送。这对于cookie机制的工作至关重要

难道你就不能不看饼干吗

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

例如,如果将cookie设置为在/foo/bar/only中读取,则位于/where/ajaxHandler.php中的文件将无法看到这些cookie

看看这个:


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

将AJAX请求发送到服务器上的无cookie子域。因此,您的应用程序是www.mydomain.com,ajax请求是从api.mydomain.com提供的,您从未在其上设置cookie。这也是使用静态文件(如图像等)执行此操作的一个好主意


请参阅

的“为组件使用无Cookie域”部分。否,Cookie将始终被发送

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


或者(很多网站都在使用),创建一个新的子域,您从未在其上发送任何cookie。

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


如果你根本不需要域中的cookies,只需删除它们(跳过1和4)

需要withCredentials标志才能通过跨源ajax调用实际发送Cookie

见:

将其设置为false将阻止发送cookies


对于相同来源的请求,您需要遵循此处提到的其他答案。

忽略cookie并不能解决它占用带宽的问题。我很好奇您所说的“根本不读cookie”是什么意思。此外,为了接触到您的角度,为特定目录设置cookie,是否可以为整个范围(但特定目录)设置cookie?如果是这样的话,我相信这会给我一些可以合作的东西。请记住,这一切都发生在同一个域中,需要通过该域中的路径进行区分。我不知道曲奇饼能处理这个问题。有人知道jQuery本身是否允许不发送带有AJAX请求的cookie吗?这将是我的最终解决方案人们并不总是可以选择不读取cookie,例如,在运行视图代码之前,通过框架上的cookie处理授权。Osseta,对无cookie域的调用非常好。目前,我们对其他资源(如几乎所有的静态文件)执行此操作。我需要详细介绍一下这个web服务。它不是独立的,并且包含在子目录中,因此为了便于讨论,假设我在web应用程序所在的同一域中调用方法,但在子路径“/publicservices/service.asmx”中。我不确定,但我认为cookie是每个(子)域的全局配置。所以它们不是开就是关,不能根据每个请求进行配置。不幸的是,我相信你是对的。非常感谢您的洞察力!几乎完美。。。因为无法恢复cookie的生存时间。如何在没有任何cookie的情况下发出请求,并且不删除它。您如何协调这一点?设置withCredentials对相同的站点请求没有影响。虽然在七年前我最初的问题中,这个.NET服务并不明显,但它是嵌入在网站中的(.asmx服务位于网站嵌套的文件夹中)。这很公平。我要说明的是,withCredentials=false防止仅在跨源请求时发送cookie。请注意,如果您在Chrome/Firefox扩展的上下文中查看此答案,我相信withCredentials会被忽略。