Zend框架 - 跨多个(不同)域的单个会话

时间:2010-02-04 11:15:05

标签: zend-framework session single-sign-on

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

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

问题:我们如何根据场景实现此要求,以便我们不需要任何第三方服务(OpenID,Lasso等)?

3 个答案:

答案 0 :(得分:4)

我不相信你想要的实际上是可能的。或者确实是安全的,因为正如Mailslut建议你可能必须在URL中传递会话ID - 强烈建议反对,因为你将使用相同的技术来保持跨域的状态将使你对使用它的人开放是邪恶的目的 - 而且你将无法区分

我认为你最好不要反对这个要求,并接受这是不现实的 - 只要你跨站点共享相同的用户数据库,多次登录就不会那么糟糕。如果它能保证用户数据安全,那么我认为值得权衡。

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

答案 1 :(得分:1)

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

How To Handle Multiple Domains

php keep session active across multiple websites

在后一个网站上,您必须注册以查看解决方案。当然,你必须根据Zend框架修改会话内容。

答案 2 :(得分:0)

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

解决方法方法会涉及在站点之间的查询字符串中手动传递会话ID,这会引起轻微的安全问题。

这里简单描述了这种方法: Sharing session across domain