跨多个域的PHP会话

时间:2012-09-11 12:19:01

标签: php ajax session

我的公司有一个webservice(abc.com),拥有自己的用户数据库,工作正常。现在我的公司想要添加一些额外的服务,这些服务位于与另一个域(xyz.com)完全不同的服务器上,但仍然使用来自abc.com的相同登录数据,因为我们完全控制它并且会有类似的像xyz.com这样的服务器只是在xyz.com上导入用户数据库是不可能的。

我的第一个想法是在从xyz.com提交登录表单时使用来自abc.com的checkuser.php,但随后我了解到会话cookie内容已绑定到域。至少这是我理解它的方式。

之后我想通过AJAX和HTTPS访问我的checkuser.php并将通过POST加密的会话数据提交给xyz.com。这也失败了,因为出于安全原因,AJAX似乎无法跨多个服务器工作。

现在我没有想法,也不知道如何使用我们的用户数据库安全地验证外部服务器上的用户。

3 个答案:

答案 0 :(得分:2)

我会使用单点登录(SSO)代替共享会话。这样,您就不会使网站代码相互依赖。如果您以后决定更改其中一个网站上的内容,则没有理由担心在其他网站上破坏功能,如果您选择在新网站中进行链接,则可以重复使用相同的解决方案。

有些人已经为你做了更好的事情,甚至可能更安全的是你自己能创造出来的。

Wikipedia对SSO有一些很好的一般知识。另外,查看OAuth和OpenID。将这些术语与PHP结合使用,搜索可以让您走上正确的轨道。

答案 1 :(得分:0)

另一种选择是让xyz.com上的登录功能直接连接到abc.com的数据库,以检查登录名和密码。然后你将xyz.com的数据库用于其他一切。此外,如果您真的想要将会话信息存储在abc.com上的数据库而不是临时文件中,那么您也可以从xyz.com访问该数据。 Here是如何执行此操作的示例。

答案 2 :(得分:0)

我一直没有使用php很长时间,并且自己没有遇到过这个问题,但是,我一直在努力阅读这本书并找到了一个答案,我会帮助你。

如果您只是尝试访问服务器xyz.com上的脚本和数据库,您可以使用其位于单独服务器(abc.com)上的脚本中的URL或IP地址来获取脚本的内容。以下功能:

/* This example allows my example script on server mvc.com
to access the script on oreilly.com */
file_get_contents("http://oreilly.com");

由于您正在远程访问代码,而且我在黑暗中拍摄,我认为 file_get_contents()将允许您通过$ _POST或$ _GET方法设置变量服务器xyz.com上的脚本,并将值发送到服务器abc.com上的脚本。然后,您可以将这些变量存储在位于单个服务器上的$ _SESSION变量中,该服务器是处理原始$ _SESSION变量和大部分处理的服务器。

如果你需要经常来回走动,它可能会成为服务器之间相当复杂的“捕获游戏”,但我认为如果你不能将数据移动到单个服务器上,这可能是解决问题的方法。如果您计划好脚本的结构,这将允许您将这些$ _SESSION变量存储在一个地方。