我正在研究在HTTP和HTTPS上都同时存在网站的情况。
当用户登录到HTTPS站点时,JSESSIONID的“安全” cookie被存储在浏览器中。如果用户关闭浏览器,然后返回-这次希望使用HTTP登录-用户将无法登录,因为浏览器不会在浏览器中存储新的“不安全” JSESSIONID,也不会发送以前存储的安全信息Cookie到服务器。
我的问题是:
有没有一种方法,当用户使用HTTP登录时,服务器可以发送新的“不安全” cookie,从而将现有的“安全” cookie转换为具有新值的“不安全” cookie? / p>
是否可以要求Tomcat在安全和不安全的连接中为JSESSIONID使用不同的cookie名称?
我试图在Internet上查找-但似乎没有办法。在这种情况下,最终用户可能会认为该站点无法正常工作。
注意: 是的,我们可以强制用户始终使用HTTPS。实际上,这就是我们正在尝试做的事情。但是,我们在网络应用程序中有一个选项可以禁用HTTPS。所以,这就是正在发生的事情-用户认为“此应用迫使我使用HTTPS,我不想使用它。让我禁用它”。要禁用HTTPS,用户以HTTPS版本登录站点,禁用HTTPS端口-触发服务器重新启动。用户现在访问HTTP站点-但由于用户从未退出HTTPS会话而无法登录-并且这些cookie仍然存在。这被视为可用性问题,我正在设法解决这个问题。
答案 0 :(得分:1)
Tomcat将允许没有安全通道的身份验证。
仅当请求通过“安全”通道或您的<cookie-config>
中的WEB-INF/web.xml
指示容器使用安全cookie时,Tomcat才会创建带有“安全”标志的cookie。 / p>
您必须已经以某种方式配置了Tomcat或您的应用程序,以导致非安全登录失败。
服务器无法在客户端上重写cookie,以将“安全” cookie更改为“非安全” cookie。具有相同主机名和路径的同名Cookie(例如JSESSIONID
)的Cookie将根据Cookie处理规则进行处理。我建议阅读RFC 6265了解更多信息。
答案 1 :(得分:0)
我最终为HTTP和HTTPS网站创建了单独的cookie名称。
由于我们的应用程序已打包并提供给客户,因此他们可以选择关闭HTTP或HTTPS。启用HTTPS后,我们会将所有HTTP用户重定向到相应的HTTPS站点。当客户管理员决定禁用HTTPS时,就会出现此问题,然后,某些使用HTTPS且未明确注销系统的用户被安全cookie滞留在浏览器缓存中-无法从HTTP站点登录系统。当然,解决方法是清除浏览器缓存-但为了避免致电支持,我们试图找到对用户透明的内容。
当站点启用HTTPS时,我们可以将Tomcat会话cookie名称设置为JSESSIONID_HTTPS
。这是我必须做的要点:
ServletContext sc = ....
SessionCookieConfig cookieConfig = sc.getSessionCookieConfig();
if ( <flag indicating whether HTTPS is enabled>) {
cookieConfig.setName("JSESSIONID_HTTPS");
} else {
cookieConfig.setName("JSESSIONID_HTTP");
}