java - 将 cookie-config 设置为 httpOnly 并在 web.xml 中保护后无法读取 JSESSIONID cookie

标签 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,我可以在带有路径/、Secure 和 httpOnly 的 http 响应中看到它。

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

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

<Context sessionCookiePath="/">

但这并没有解决问题。

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

最佳答案

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

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

阅读此问答以了解更多详细信息:How does cookie “Secure” flag work?

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

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

你还应该 configure your app to accepthttps 连接并将 http 重定向到 https

关于java - 将 cookie-config 设置为 httpOnly 并在 web.xml 中保护后无法读取 JSESSIONID cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382681/

相关文章:

java - 未使用 @Resource 注入(inject) WebServiceContext

spring - 使用 spring 和 junit 测试 Web 应用程序集群

azure - 在 Azure 上部署 war 文件

java - Java 应用程序中的 SameSite cookie

java - 更改微调器颜色 Android Studio

java - 收到致命警报 : unknown_ca while mutual authentication

cookies - Set-Cookie 是否包含多个 cookie?

asp.net - 如何在 ASP.NET 中分配非持久(内存中)cookie?

java - 日期时间说明

java - Kafka在多节点集群中将主题存储在哪里?