我已在我的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不安全,因此被忽略而无法在请求中发送?
答案 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
。