【问题标题】:Angularjs: $http response set-cookie is not work with CORSAngularjs:$http 响应 set-cookie 不适用于 CORS
【发布时间】:2015-08-15 16:44:22
【问题描述】:

我正在使用 Angular 和 java 构建一个小型网站。

我尝试编写一个身份验证系统,但我遇到了一些关于 cookie 的问题。

我的 web 应用在 localhost:8081 上运行,而我的 java servlet 在 localhost:8888 上。 在我的 Java 代码中:

response.addHeader("Access-Control-Allow-Origin", "http://localhost:8081"); response.addHeader("Access-Control-Allow-Headers", "X-Requested-With"); response.addHeader("Access-Control-Allow-Credentials", "true");

在我的角度代码中:

$httpProvider.defaults.withCredentials = true; $httpProvider.defaults.useXDomain = true; delete $httpProvider.defaults.headers.common['X-Requested-With'];

其实我已经尝试过阅读 Set-Cookie in HTTP header is ignored with AngularJS

Angularjs $http does not seem to understand “Set-Cookie” in the response

$http response Set-Cookie not accessible

但我仍然遇到奇怪的问题。

我的第一次登录:您可以发现服务器在 set-cookies 标头中响应了一个 JSESSIONID 和一个移动 cookie。

但我检查了 chrome 开发人员工具,发现资源>cookies 为空。

登录后,我向服务器发送另一个请求以获取一些列表: 但奇怪的是 chrome 发送 JSEESIONID,它在第一次登录时从服务器发送到客户端,但在 chrome 开发人员工具中找不到。虽然 chrome 不发送我自己创建的“移动”cookie。

我在服务器中设置了我的 cookie:

CookieUtils.setCookie(response, "mobile",String.valueOf(customer.getPhone()), 3600*24*7, "/","localhost");
request.getSession().setAttribute("user", customer);
request.getSession().setMaxInactiveInterval(3600*24);

如果我想在 $http 响应中获取 cookie 并设置它,并且当我用这个 cookie 请求其他东西(如我的“移动”cookie)时,我该怎么办,因为我想以这种方式进行身份验证。

虽然,使用 firefox 的相同代码是可以的,但不能在 chrome 43.0.2357.65 m 中工作,wtf..

【问题讨论】:

  • 您找到解决方案了吗?
  • 你找到解决办法了吗?

标签: angularjs google-chrome cookies cross-domain


【解决方案1】:

添加

 $httpProvider.defaults.withCredentials = true;

根据您的请求,否则将设置 cookie。

【讨论】:

    猜你喜欢
    • 2013-10-23
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2014-11-19
    • 2013-03-15
    • 2016-03-04
    • 2015-10-24
    相关资源
    最近更新 更多