将 cookie-config 设置为 httpOnly 并在 web.xml 中保护后无法读取 JSESSIONID cookie
Can not read JSESSIONID cookie after setting cookie-config to httpOnly and secure in web.xml
我在我的 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 不安全,因此被忽略以在请求中发送?
根据您的评论,您正在将会话 cookie secure
属性设置为 true
,使用 http
连接进行传输。
虽然正在使用的 http
协议不保证机密传输,但您通过激活 secure
属性正确指示会话是敏感信息。因此,浏览器拒绝通过不安全的纯文本 http
传输将此信息发送回服务器。
阅读此 Q/A 了解更多详细信息:How does cookie “Secure” flag work?
由于永远不会将 JSESSIONID 发送回服务器,因此每个请求最终都会创建一个新会话,该会话永远不会用于后续请求。
解决方案是禁用 secure
属性,或者最好是 configure and use a https
connector in tomcat.
您还应该 configure your app to accept https
仅连接并将 http
重定向到 https
。
我在我的 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 不安全,因此被忽略以在请求中发送?
根据您的评论,您正在将会话 cookie secure
属性设置为 true
,使用 http
连接进行传输。
虽然正在使用的 http
协议不保证机密传输,但您通过激活 secure
属性正确指示会话是敏感信息。因此,浏览器拒绝通过不安全的纯文本 http
传输将此信息发送回服务器。
阅读此 Q/A 了解更多详细信息:How does cookie “Secure” flag work?
由于永远不会将 JSESSIONID 发送回服务器,因此每个请求最终都会创建一个新会话,该会话永远不会用于后续请求。
解决方案是禁用 secure
属性,或者最好是 configure and use a https
connector in tomcat.
您还应该 configure your app to accept https
仅连接并将 http
重定向到 https
。