2010-10-18 115 views
5

我们最近更改了我们的登录以使用HTTPS,并且我们遇到登录问题。HTTPS登录未将JSESSIONID保存在cookie中

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

Cookie未设置为仅限https,但似乎不能在http页面上工作。

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

编辑:

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

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

+0

你可以将会话作为post参数提交给http页面并让它在新域中设置会话吗? – 2010-10-21 07:24:47

+0

OP表示他/她将无法验证任何如TL结束的答案。 – Kev 2012-09-07 23:28:47

+0

这需要重新开放,因为它是一个似乎无法解决的真实和持续的问题。我们有一个开发团队试图在数月内推出一个解决方案。升级Tomcat并没有工作,因为它似乎是有意的行为,但是这种预期的行为使得无法使用外部域,这不是web 2.0! – 2013-06-18 00:58:28

回答

1

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

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

我不知道很多关于这一点,但这里有几个引用:

+0

但是,我想知道为什么当用户第二次登录时适用于您。 – christian 2010-10-18 23:18:28

+0

由于其中一个重定向转到HTTP(非安全)页面。 – partkyle 2010-10-19 00:37:52

+0

这会起作用,但问题在于我们的营销网站位于不同的URL上,从而阻止Internet Explorer(以最低的默认设置)从另一个域设置Cookie。你有什么想法吗? – partkyle 2010-10-19 05:42:32

3

我们有这个问题与我们的应用程序。我们想要通过https登录的类似行为,然后重定向到http页面。

问题是,当Tomcat根据https创建会话时,它会创建一个安全的cookie,无法在http中读取。请注意,这不断被归档为Tomcat中的一个bug,并被标记为“不是bug”。

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

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

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

(我刚刚注意到这里的一些建议是重复一个较早的答案 - 我很抱歉,但会反正,因为它来自直接经验)。

编辑:我在你的评论中看到你有两个域名,这使得cookies的使用变得复杂。您可以使用代理或Web服务器(如Apache)向最终用户展示一个域?

+0

提到的论坛主题的新网址似乎是https://forums.oracle.com/forums/thread.jspa?threadID=1394970 – ivant 2013-05-09 08:11:52

0

如果您已验证安全专用标志已关闭,并且第一个Cookie正确放置正确 - 我猜测可能存在阻止再次显示cookie的路径问题。