【问题标题】:PHP session across multiple domains跨多个域的 PHP 会话
【发布时间】:2012-09-11 12:19:01
【问题描述】:

我的公司有一个网络服务 (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 似乎不能跨多个服务器工作。

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

【问题讨论】:

标签: php ajax session


【解决方案1】:

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

更好的是有人已经为您制作了它,而且您可以自己创建的东西甚至可能更安全。

Wikipedia 对 SSO 有一定的了解。另外,请查看 OAuth 和 OpenID。将这些术语与 PH​​P 结合起来,搜索应该会让您走上正轨。

【讨论】:

  • 谢谢!我找到了这个 SSO 库 (github.com/jasny/SSO),它很容易使用。现在我只需要将它用于我的用途:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我使用 php 的时间不长,我自己也没有遇到过这个问题,但是,我一直在努力阅读书籍并找到了一个可以帮助你的答案。

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

    /* 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 变量存储在一个地方。

    【讨论】:

      猜你喜欢
      • 2016-08-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2011-01-07
      • 2023-03-14
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多