2010-05-13 194 views
31

我有一个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); } 
}); 

回答

0

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

难道你不能简单地不读取饼干?

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

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

检查了这一点:http://us.php.net/setcookie

虽然我不知道,如果你使用PHP,它可能是你一个很好的起点。

+5

忽略cookie并不能解决它消耗带宽的问题 – Osseta 2010-05-14 04:09:55

+1

Foxtrot,我很好奇你的意思是“根本不读取cookie”。另外,要设置特定目录的角度来触及你的角度,是可以为整个范围设置一个cookie,但是某个目录?如果是这样,我相信这会给我一些工作。请记住,这一切都发生在同一个域中,并且需要通过该域中的路径进行区分。我不知道cookie可以解决这个问题。 是否有人知道jQuery本身是否允许不向cookie发送AJAX请求?这对我来说是最终的解决方案。 =] – Simon 2010-05-15 17:01:10

+1

人们并不总是可以选择不读取cookie,例如,在视图代码运行之前,通过框架上的cookie处理授权时。 – 2014-07-08 06:44:05

15

将AJAX请求发送到服务器上无cookie的子域。所以你的应用程序是www.mydomain.com,而ajax请求是从api.mydomain.com提供的,你从来没有设置cookie。另外一个伟大的想法,这样做与像图片等静态文件...

看到“使用Cookie的免费域名的组件”的http://developer.yahoo.com/performance/rules.html

+0

奥塞塔,非常好的电话无Cookie域。我们目前正在为其他资源执行此操作,例如几乎所有的静态文件。 我需要详细阐述一下这个Web服务。它不是独立的,并且包含在一个子目录中,所以为了这个讨论,我说我在同一个域中调用方法,我的web应用程序在但是在子路径“/publicservices/service.asmx”中。 – Simon 2010-05-15 17:07:24

+0

我并不确定,但我认为cookie是每个(子)域的全局配置。因此,它们可以打开或关闭,并且不能根据每个请求进行配置。 – Osseta 2010-05-18 06:40:32

+0

不幸的是,我确信你是对的。非常感谢您的洞察! – Simon 2010-05-18 15:51:03

1

部分没有,该cookie将始终发送。

您可以如何将cookie发送到浏览器,并使用http标志,这意味着它们不会通过javascript发送。

或(许多网站使用),创建一个新的子域,你永远不会发送任何cookie。

6

另一种方法是之前做$阿贾克斯:
1.从浏览器的cookie为您的域使用JavaScript(它们保存在一个全局变量)
2.删除cookies与JavaScript的域从浏览器
3.执行$ .ajax调用
4.将cookies(来自全局变量)放回到浏览器中。

如果你根本不需要来自你的域的cookies只是删除它们(所以跳过1.和4.)。

+0

如果我只能给你1000个upvotes ... – 2015-11-14 23:41:19

+0

几乎完美...因为没有办法恢复cookie的生活。 – 2016-11-10 05:00:59

0

需要withCredentials标志来实际发送带有交叉源ajax调用的cookie。

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

它设置为false将阻止cookie的发送。

对于同源请求,您需要遵循此处提及的其他解答。

+0

你如何协调这一点? _设置withCredentials对同一站点请求没有影响。虽然在我七年前的原始问题中不明显,但这个.NET服务嵌入在网站中(在嵌套在站点中的文件夹中的_.asmx_服务) 。 – Simon 2017-02-08 21:01:44

+0

够公平的。我将明确指出,withCredentials = false可防止仅在跨源请求上发送cookie。 – 2017-02-09 21:40:30