防止Cookies发送AJAX请求
我有一个Web服务,我从脚本调用但不需要存储在cookie中的任何信息。每当我向服务提出请求时,cookie都会随之发送。据我所知,默认Cookie是通过HTTP请求发送的,但是有什么办法可以覆盖该行为并且不发送cookie?防止Cookies发送AJAX请求
概括地说,我发出了我的要求是这样的:
$.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 /中读取,位于/whatever/ajaxHandler.php中的文件将无法看到这些cookie。
检查了这一点:http://us.php.net/setcookie
虽然我不知道,如果你使用PHP,它可能是你一个很好的起点。
将AJAX请求发送到服务器上无cookie的子域。所以你的应用程序是www.mydomain.com,而ajax请求是从api.mydomain.com提供的,你从来没有设置cookie。另外一个伟大的想法,这样做与像图片等静态文件...
看到“使用Cookie的免费域名的组件”的http://developer.yahoo.com/performance/rules.html
奥塞塔,非常好的电话无Cookie域。我们目前正在为其他资源执行此操作,例如几乎所有的静态文件。 我需要详细阐述一下这个Web服务。它不是独立的,并且包含在一个子目录中,所以为了这个讨论,我说我在同一个域中调用方法,我的web应用程序在但是在子路径“/publicservices/service.asmx”中。 – Simon 2010-05-15 17:07:24
我并不确定,但我认为cookie是每个(子)域的全局配置。因此,它们可以打开或关闭,并且不能根据每个请求进行配置。 – Osseta 2010-05-18 06:40:32
不幸的是,我确信你是对的。非常感谢您的洞察! – Simon 2010-05-18 15:51:03
部分没有,该cookie将始终发送。
您可以如何将cookie发送到浏览器,并使用http
标志,这意味着它们不会通过javascript发送。
或(许多网站使用),创建一个新的子域,你永远不会发送任何cookie。
另一种方法是之前做$阿贾克斯:
1.从浏览器的cookie为您的域使用JavaScript(它们保存在一个全局变量)
2.删除cookies与JavaScript的域从浏览器
3.执行$ .ajax调用
4.将cookies(来自全局变量)放回到浏览器中。
如果你根本不需要来自你的域的cookies只是删除它们(所以跳过1.和4.)。
如果我只能给你1000个upvotes ... – 2015-11-14 23:41:19
几乎完美...因为没有办法恢复cookie的生活。 – 2016-11-10 05:00:59
需要withCredentials标志来实际发送带有交叉源ajax调用的cookie。
请参见:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
它设置为false将阻止cookie的发送。
对于同源请求,您需要遵循此处提及的其他解答。
你如何协调这一点? _设置withCredentials对同一站点请求没有影响。虽然在我七年前的原始问题中不明显,但这个.NET服务嵌入在网站中(在嵌套在站点中的文件夹中的_.asmx_服务) 。 – Simon 2017-02-08 21:01:44
够公平的。我将明确指出,withCredentials = false可防止仅在跨源请求上发送cookie。 – 2017-02-09 21:40:30
忽略cookie并不能解决它消耗带宽的问题 – Osseta 2010-05-14 04:09:55
Foxtrot,我很好奇你的意思是“根本不读取cookie”。另外,要设置特定目录的角度来触及你的角度,是可以为整个范围设置一个cookie,但是某个目录?如果是这样,我相信这会给我一些工作。请记住,这一切都发生在同一个域中,并且需要通过该域中的路径进行区分。我不知道cookie可以解决这个问题。 是否有人知道jQuery本身是否允许不向cookie发送AJAX请求?这对我来说是最终的解决方案。 =] – Simon 2010-05-15 17:01:10
人们并不总是可以选择不读取cookie,例如,在视图代码运行之前,通过框架上的cookie处理授权时。 – 2014-07-08 06:44:05