$ http不会在请求中发送cookie

Tim*_*ütz 70 html5 webkit xmlhttprequest angularjs

我们正在使用AngularJS和Java Servlets开发RESTful Web服务.当用户登录时,我们的后端会向前端发送"Set-Cookie"标头.在Angular中,我们通过$cookies(ngCookie - module)访问标题并进行设置. 在此输入图像描述

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

选项要求: 选项请求

GET请求 GET请求

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

如何启用Angular发送cookie?

Mat*_*erg 135

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

.config(function ($httpProvider) {
    $httpProvider.defaults.withCredentials = true;
    //rest of route code
})
Run Code Online (Sandbox Code Playgroud)

关于angularjs withCredentials的信息:http://docs.angularjs.org/api/ng.$http

哪些链接指向mozilla文章:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS? redlocale = en-US & redlationsctslug = HTML_access_control#section_5

  • 只是为了补充一点,我注意到当我调用`$ http.get('something',{withCredentials:true})时,浏览器不会发送cookie.但是,使用上面的代码将`withCredentials`添加到默认值就可以了.不知道为什么,但希望如果其他人遇到这个问题会有所帮助 (10认同)
  • 这并将后端标头设置为Allow-Credentials解决了问题!谢谢! (6认同)
  • 它仍然不适合我.我正在做的是服务器在我的第一个响应上设置一个httpOnly cookie,当我发送第二个请求时,为第一个响应设置的cookie从未被附加到第二个请求. (4认同)

Dan*_*l F 11

$http.get("URL", { withCredentials: true })
  .success(function(data, status, headers, config) {})
  .error(function(data, status, headers, config) {});
Run Code Online (Sandbox Code Playgroud)

另外要记住的一点是:您需要启用第三方Cookie.如果您在Chrome中全局禁用它,请点击域名左侧的"i" - 符号,然后点击Cookie,然后"阻止"并取消阻止目标域.