Zend framework Zend Framework-跨多个(不同)域的单个会话

Zend framework Zend Framework-跨多个(不同)域的单个会话,zend-framework,session,single-sign-on,Zend Framework,Session,Single Sign On,场景:将有多个域托管的web应用程序(例如www.example.com、www.example.co.uk、www.example-3.com等)。当用户在其中任何一个域上注册时,数据将存储在集中的主数据库中。当用户登录到任何一个网站时,会话数据将存储在中央主数据库中 要求:登录用户将能够浏览任何域(共享同一会话数据库)。当他/她浏览任何域时,除了他/她实际登录的域之外,会话应该保持不变,无需再次登录。我们不想使用任何类似openid的东西 问题:我们如何根据场景实现这一要求,从而不需要任何第

场景:将有多个域托管的web应用程序(例如www.example.com、www.example.co.uk、www.example-3.com等)。当用户在其中任何一个域上注册时,数据将存储在集中的主数据库中。当用户登录到任何一个网站时,会话数据将存储在中央主数据库中

要求:登录用户将能够浏览任何域(共享同一会话数据库)。当他/她浏览任何域时,除了他/她实际登录的域之外,会话应该保持不变,无需再次登录。我们不想使用任何类似openid的东西


问题:我们如何根据场景实现这一要求,从而不需要任何第三方服务(OpenID、Lasso等)?

这是一个非常好的问题,请尝试以下链接以获得可能的解决方案或想法:


在后一个站点上,您必须注册才能看到解决方案。当然,您必须根据Zend框架修改会话内容。

您将遇到的问题是,对于不同的子域,有一些方法可以处理这个问题,但不是完全不同的域。当然,您可以让所有站点的后端都可以访问会话,但客户端的问题是,您将无法在不同域之间共享cookie数据(它可以有效地在服务器端标识您的会话)

解决方法包括在站点之间的querystring中从cookie手动传递会话id,这会带来轻微的安全问题

此处简要介绍了该方法:

我不相信你想要的东西实际上是可能的。或者确实是安全的,因为正如Mailslut建议的那样,您可能必须在URL中传递会话id—强烈建议您不要这样做,因为您在域之间使用相同的技术来保持状态会让您对出于恶意目的使用它的人开放—并且您将无法区分两者之间的区别

我认为你最好还是反对这一要求,承认这是不现实的——只要你在不同站点共享同一个用户数据库,多次登录就没有那么糟糕。如果它能保证用户数据的安全,我认为这是值得权衡的


您甚至无法使用cookie来执行此操作,因为您只会收到您当前所在域的cookie-浏览器无法知道这些站点是否相关。

那么MSN/Hotmail使用的是什么?基于passport.com的身份验证如何不需要登录其网络的网站?他们拥有比您可能拥有的更大的基础设施,而且对体系结构的限制更少。Passport.com身份验证的工作原理与OpenID类似(撇开技术差异不谈,它们都执行相同的功能),但您已经忽略了这一可能性。简单地说,如果没有OpenID风格的系统,您将无法以对用户安全的方式完成这项工作。谢谢,我希望这个答案能够帮助人们。