将cookie-config设置为httpOnly并在web.xml中安全后,无法读取JSESSIONID cookie

时间:2019-03-27 16:57:11

标签: java tomcat cookies session-cookies tomcat8.5

我已在我的webapp应用程序web.xml中添加了以下配置

  <session-config>
    <cookie-config>
      <path>/</path>
      <http-only>true</http-only>
      <secure>true</secure>
    </cookie-config>
 </session-config>  

启动我的应用程序时,我发送一个http请求来设置此cookie,并且我可以在http响应中看到它,其路径为/,Secure和httpOnly。

但是,我看不到此Cookie在以下http请求中发送,因此,如果对以下请求执行request.getSession()。getId(),则会得到一个空字符串。

我尝试将以下内容添加到tomcat 8.5上下文以及WAR上下文中

<Context sessionCookiePath="/">

但是它不能解决问题。

这是否意味着JSESSIONID cookie不安全,因此被忽略而无法在请求中发送?

1 个答案:

答案 0 :(得分:1)

根据您的评论,您正在使用secure连接进行传输,将会话Cookie的true属性设置为http

尽管使用的http协议不能保证机密传输,但是您可以通过激活secure属性来正确地指示该会话是敏感信息。因此,浏览器拒绝通过不安全的纯文本http传输将该信息发送回服务器。

阅读此问答以获取其他详细信息:How does cookie “Secure” flag work?

由于JSESSIONID从未发送回服务器,因此每个请求最终都会创建一个新会话,该会话永远不会用于后续请求。

解决方案是禁用secure属性,或者禁用configure and use a https connector in tomcat

您还应该仅configure your app to accept https个连接,并将http重定向到https