HTTPS登录不将JSESSIONID保存在cookie中

时间:2010-10-18 22:33:52

标签: security http tomcat cookies https

我们最近更改了登录以使用HTTPS,我们遇到了登录问题。

登录后,用户将被重定向到未加密的(HTTP)页面。当它到达此页面时,站点将检查用户是否已登录。它会创建一个新会话,并且看起来用户未登录,因此我们的用户被重定向到登录页面。如果用户再次登录,它将起作用。

Cookie不会设置为仅https,但似乎它们无法在http页面上运行。

有谁知道为什么会发生这种情况。

修改

我应该提到显示登录的页面位于不同的URL上。 (运行tomcat实例的计算机有一个登录页面,但营销站点在wordpress安装上并使用不同的域名。)

我无法使用HTTP请求第一种方法来设置cookie,因为默认的Internet Explorer设置会阻止会话cookie的保存。

3 个答案:

答案 0 :(得分:3)

我们的应用程序存在此问题。我们想要通过https登录,然后重定向到http页面。

问题是,当Tomcat在https下创建会话时,它会创建一个无法在http中读取的安全cookie。请注意,这会在Tomcat中作为错误提交并被标记为“不是错误”。

我们最终的解决方案是基于此论坛中的消息 http://forum.java.sun.com/thread.jspa?threadID=197150&start=0

从论坛主题引用:“保持在Tomcat中会话的一种方式,当在SSL模式下得到创建的会话cookie是通过创建非安全的cookie,结果收到了创建安全cookie时欺骗浏览器。 “这是通过包装请求并覆盖request.getSession()的过滤器完成的。它对我们来说非常有效。

作为旁注,从https重定向到http页面会在某些版本的Internet Explorer中弹出警告消息“您将被重定向到不安全的连接。”我们发现避免这种情况的唯一方法是使用元刷新标记完成重定向。具体来说,从原始https请求返回一个空白页面,其中包含一个刷新到http页面的元标记。这避免了警告消息,代价是使代码稍微复杂一些。

(我刚刚注意到这里的一些建议是重复早期的答案 - 我道歉,但是会发布,因为它来自直接经验)。

编辑:我在您的评论中看到您有两个域名,这会使Cookie的使用变得复杂。您是否可以使用Apache等代理服务器或Web服务器向最终用户提供一个域?

答案 1 :(得分:1)

使用https时,tomcat通过安全cookie建立jsessionid,无法通过非安全连接传输。所以当你回到http时,会话就会丢失。

解决方法(我自己没有这样做)似乎是在重定向到https之前通过http请求建立会话,然后在HttpRequestWrapper中设置过滤器以插入非安全cookie。

我对此并不了解,但这里有几个参考文献:

答案 2 :(得分:0)

如果您已验证仅安全标志已关闭,并且第一个cookie正在被正确删除 - 我猜可能存在路径问题,导致cookie无法再次显示。