$ http不在请求中发送cookie


70

我们正在使用AngularJS和Java Servlet开发RESTful Web服务。当用户登录时,我们的后端会向前端发送一个“ Set-Cookie”标头。在Angular中,我们通过$cookies(ngCookie-module)访问标头并进行设置。 在此处输入图片说明

现在,用户已登录,他可以例如删除一些东西。因此,前端将GET请求发送到后端。因为我们在不同的域上工作,所以我们需要设置一些CORS标头,并且Angular在实际的GET请求之前会执行OPTIONS请求:

选项要求: 选项要求

GET请求 GET请求

我们通过$ http模块在Angular中执行此操作,但它不会发送包含的Cookie JSESSIONID

如何启用Angular发送Cookie?

Answers:


137

在配置中,DI $httpProvider,然后将withCredentials设置为true:

.config(function ($httpProvider) {
    $httpProvider.defaults.withCredentials = true;
    //rest of route code
})

有关带凭证的angularjs的信息:http ://docs.angularjs.org/api/ng.$http

链接到mozilla文章的链接:https : //developer.mozilla.org/zh-CN/docs/HTTP/Access_control_CORS? redirectlocale = zh-CN & redirectslug = HTTP_access_control#section_5


6
并将后端标头设置为Allow-Credentials可解决此问题!谢谢!
TimDaubenschütz13年

10
补充一下,当我打电话时,我注意到$http.get('something', { withCredentials: true})浏览器不会发送cookie。但是,使用上面的代码将其添加withCredentials到默认值即可达到目的。不知道为什么,但是希望如果有人遇到这个问题会
David Savage 2014年

4
它仍然对我不起作用。我正在做的是服务器在我的第一个响应上设置一个httpOnly cookie,当我发送第二个请求时,为第一个响应设置的cookie从未附加到第二个请求。
钱琛

1
它在localhost中工作,但是当我移到服务器时它不工作。为什么不在服务器中发送cookie?
Abhilash Augustine

11
$http.get("URL", { withCredentials: true })
  .success(function(data, status, headers, config) {})
  .error(function(data, status, headers, config) {});

要记住的另一件事:您需要启用3rd cookie。如果您已在Chrome中全局禁用它,请单击域名左侧的“ i”-符号,然后单击Cookie,然后“阻止”并取消阻止目标域。


1
这种方法在AngularJS2中对我有用。。。
HDave
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.