跨域共享会话

6

目前我们在跨子域共享同一会话方面遇到了问题。我们正在使用Jboss服务器。

用户访问与其语言环境相对应的站点,例如en_US,该站点具有唯一的域名。为该域创建一个cookie。允许用户转到具有不同域名的其他语言环境。问题是为其他域创建了新的cookie,导致丢失先前会话中存储的信息。我们需要在域之间使用相同的会话cookie。

示例域: sample.au sample.co.uk sample.us

我要求研究Iframe / p3p解决方案。我对这个概念很陌生。您能否指导我如何实现这一点。

提前感谢。


https://dev59.com/GEbRa4cB1Zd3GeqPxRwh - EthR
4个回答

11
您需要的是一个单点登录服务。您可以通过拥有一个集中式站点Z来管理会话/登录,为您的站点A..Y创建自己的单点登录服务。
  • 用户进入站点A时,没有提供任何会话ID
  • 站点A重定向用户到站点Z
  • 站点Z创建会话,也许在验证用户身份后,丢弃站点Z Cookie,并将用户重定向回站点A,其中URL包含附加载荷,告诉站点A用户的会话ID是什么
  • 站点A放置会话Cookie,允许用户继续在A上使用共享会话

现在当用户转到站点B时

  • 站点B看不到会话,重定向到站点Z
  • 站点Z发现它已经为这个人有一个会话,直接将他们用会话ID载荷重定向回B
  • 站点B放置会话Cookie,一切都很好。

换句话说,您的信号单点登录服务为用户提供了他们可以挂起的东西(会话Cookie),以及他们可以传递给参与站点以证明其已通过身份验证的东西。


Paul Dixon:网站Z发现 此人 已有会话,将直接使用带有会话ID负载的重定向返回B。但是网站Z如何识别此人正在登录呢? - pshirishreddy
安全吗?当您通过URL传递sessionID时,它会变得可拦截,除非您使用SSL! - markus

6

如果Cookie对于一个通用的高级域是有效的,它们只能在域之间共享。因此,foo.example.combar.example.com可以共享一个为example.com设置的cookie。请注意,为了实现这一点,cookie的Domain参数值必须是.example.com(带有前导点)。


3

您需要将cookie的域设置为以点号开头的顶级域名,例如对于subdomain1.domain.com和subdomain2.domain.com,您应该将会话cookie的域设置为:.domain.com。

在JBoss中,您可以在javax.servlet.http.Cookie类中覆盖所有子域的设置。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接