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

Zik*_*iko 3 java cookies tomcat 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>  
Run Code Online (Sandbox Code Playgroud)

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

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

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

<Context sessionCookiePath="/">
Run Code Online (Sandbox Code Playgroud)

但它并没有解决问题。

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

Sel*_*ron 5

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

\n\n

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

\n\n

阅读此问答了解更多详细信息:Cookie \xe2\x80\x9cSecure\xe2\x80\x9d 标志如何工作?

\n\n

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

\n\n

解决方案是禁用该secure属性,或者最好在 tomcat 中配置并使用连接器https连接器。

\n\n

您还应该将您的应用程序配置为仅接受 https连接并重定向httphttps.

\n