AngularJs: 无法读取从服务器发送的 cookie

AngularJs: Can not read cookies sent from server

我浏览了一堆与我的问题类似的问题,但我尝试过的 none 解决方案似乎有效。

我有一个 Jersey2.0 REST 服务,可以将 cookie 添加到响应中,然后 return 将其发送到 Angularjs 前端应用程序。我已经正确完成了设置(Access-Control-Allow-Credentials=true,Access-Control-Allow-Origin 中没有通配符,等等)。

我通过在响应中添加 "SET-COOKIE" header 来做到这一点,如下所示:

MultivaluedMap<String, Object> headers = responseContext.getHeaders();
headers.add("SET-COOKIE", new NewCookie(cookieName, cookieValue);

这有效,而且我可以看到在对特定 REST 端点的特定 REST 服务调用的响应中 returned cookie。我的意思是,在“网络”选项卡下的 Chrome 开发人员控制台上,我可以单击应该 return cookie 的请求,并且在 'Cookies' 和 'Headers' 选项卡,我可以在响应中看到 returned cookie。事实上,当我向端点发出另一个请求时,现在请求中发送了相同的 cookie,我可以在 Jersey 服务器上捕获它。

太棒了。问题是 cookie 没有显示在 'Resources' 选项卡上。如果我单击 'Resources' 选项卡,然后沿左侧 select 'Cookies' 下拉菜单然后单击 select 本地主机,我尝试在响应中发送的 cookie 不是那里。我假设这也是为什么当我尝试使用 ngCookies 通过 $cookies.get('cookieId'); 在我的 AngularJs 应用程序中获取 cookie 时,我得到未定义的原因。

此外,以防万一有人在 answer/comments 中提到它,我很确定这里的问题不是 HttpOnly。我的 JSESSIONID cookie 得到 returned,我可以在 'Resources' 选项卡中看到它,其中选中了 Http 字段以指示 HttpOnly。

我想也许是因为我在公司环境中,他们不允许我添加 cookie,但我可以通过 $Cookies.put('cookieId', 'cookieValue'); 在 Angular 前端执行此操作,并且它在 'Resources' 选项卡上显示得很好。

关于为什么我的 cookie 没有从服务器添加的任何帮助?

在深入研究了几个与我原来的问题相关的 Whosebug 问题后,我通过 this Whosebug question 发现在一个域上创建的 cookie 无法使用 Javascript 在另一个域上访问。

我必须想出一个解决方法,但我原来的问题已经得到解答,所以将其标记为已回答。

对于你的情况,只要设置cookie的路径就很容易解决, 例如

Cookie myCookie = new Cookie("Name_of_cookie", "String_value_of_cookie")
myCookie.setPath("/the domain Js is using ")

或者对于最有可能部署 Js 的主域,将其保留为 /