Cookie的Path属性不会影响后续请求

时间:2016-07-13 12:29:05

标签: rest cookies path subdomain

我有一个REST Web服务,它在响应中发送一个cookie。 REST URL看起来像 http://localhost:8080/myfoo/service/v1/acc/login

在我的java代码中,我设置了如下的cookie

 Response.ok(entity).cookie(new NewCookie("JSESSIONID", "12344", "/", "localhost", null, -1, false));

当我看到Web服务的响应头时,cookie标题如下所示

"JSESSIONID=12344;Domain=localhost;Path="/";Version=1"

但是,当我向同一个域的另一条路径发出请求时,如下所示

http://localhost:8080/mybar/service/v1/acc/profile

请求中不会发送cookie。

所以,当我在浏览器商店中查看cookie时(使用内容设置),我在下面看到了cookie的条目。

Name:   JSESSIONID
Content: 12344
Domain: localhost
Path:   /myfoo/service/v1/acc/login
Send for:   Any kind of connection
Accessible to script:   Yes
Created:    Wednesday, July 13, 2016 at 5:04:40 PM
Expires:    When the browsing session ends

因此,如果您注意到,浏览器存储中cookie的路径属性与REST服务响应的路径属性不同。有什么想法在这里出错吗?

1 个答案:

答案 0 :(得分:0)

经过长时间的研究,我找到了根本原因。问题出在cxf库3.1.6上。将cookie对象转换为标题时,它会引用特殊字符。 因此,它在Java代码中引用/设置为Set-Cookie标头中的“/”。但是浏览器将“/”视为无效并将路径设置为当前路径。

但是,3.1.7-SNAPSHOT已经解决了这个问题。 将我的cxf库更新到上述版本后,问题就解决了。

如果我们不想更新库,我们可以手动设置Set-Cookie标头作为替代解决方案。

以下是参考: https://issues.apache.org/jira/browse/CXF-6862