我浏览了一堆类似于我的问题,但我尝试过的解决方案似乎都没有。
我有一个Jersey2.0 REST服务,它为响应添加一个cookie并将其返回给Angularjs前端应用程序。我已经正确完成了设置(Access-Control-Allow-Credentials = true,Access-Control-Allow-Origin中没有通配符等)。
我是通过添加" SET-COOKIE"响应上的标题如下:
MultivaluedMap<String, Object> headers = responseContext.getHeaders();
headers.add("SET-COOKIE", new NewCookie(cookieName, cookieValue);
这很有效,我可以看到在特定REST服务调用特定REST端点的响应中返回的cookie。我的意思是,在“网络”标签下的Chrome开发者控制台上,我可以点击应该返回Cookie的请求,以及“Cookie”和“Cookie”中的内容。和&#39; Headers&#39;标签,我可以看到响应中返回的cookie。实际上,当我向端点发出另一个请求时,现在在请求中发送了相同的cookie,我可以在Jersey服务器上捕获它。
大。问题是,cookie没有显示在“资源”上。标签。如果我点击资源&#39;选项卡,然后沿左侧选择&#39; Cookies&#39;下拉然后选择localhost,我试图在响应中发送的cookie不存在。我假设这也是为什么当我尝试使用ngCookies通过$cookies.get('cookieId');
在我的AngularJs应用程序中获取cookie时,我得到了未定义。
另外,如果有人在回答/评论中提到它,我很确定这里的问题不是HttpOnly。我的JSESSIONID cookie被返回了,我可以在&#39; Resources&#39;中找到它。检查Http字段的选项卡指示HttpOnly。
我想也许是因为我在公司环境中,他们不允许我添加Cookie,但我可以通过$Cookies.put('cookieId', 'cookieValue');
在Angular前端执行此操作它显示在&#39;资源&#39; tab就好了。
有关为什么我的Cookie没有从服务器添加的任何帮助?
答案 0 :(得分:1)
在深入研究了一些与原始问题相关的stackoverflow问题之后,我通过this stackoverflow question发现在一个域上创建的cookie无法使用Javascript在另一个域上访问。
我将不得不为此提出一个解决方法,但我的原始问题已得到解答,因此将其标记为已回答。
答案 1 :(得分:0)
对于您的情况,如果您只设置cookie的路径,则很容易解决, e.g。
Cookie myCookie = new Cookie("Name_of_cookie", "String_value_of_cookie")
myCookie.setPath("/the domain Js is using ")
或者只是将/
保留为最可能部署Js的主域名。