在PHP中,在同一服务器上的多个域之间共享会话


Sharing session across multiple domains on same server in PHP

我需要为我的一个项目实现一个解决方案,其中我有多个域+多个子域,它们都需要共享同一个会话。所有域和子域都指向连接到单个数据库的单个应用程序。

意味着如果用户从任何域登录,则可以访问应用程序的其他域的安全页面。用户可以通过以下链接或在浏览器中打开新选项卡来更改域。

我浏览了一些文章,发现了以下提到的一些解决方案:-

  1. 数据库中的会话-如果来自同一网络、具有相同用户代理的其他用户命中,该怎么办?

  2. iFrame消息传递-我在某个地方听说,iFrame在文档加载时渲染,然后在显示一些页面内容后检查会话会惹恼用户。

  3. CURLOPT_COOKIEFILE&CURLOPT_COOKIEJAR-我玩过这个,它运行得很好,但不知道它是否安全,是否是性能杀手。

  4. 单一登录(SSO)-我需要一些R&D来实现这一点,这将是最后的选择。

请建议该怎么办?

为了验证我没有错,您需要在所有应用程序中共享用户会话。

如上所述,您可以使用上面的4个选项。然而,我想把重点放在第一个选项上,即将会话放在DB中,并建议另一个选项,将会话保留在共享目录或服务器中。

  1. 数据库中的会话-您的问题的答案(如果来自同一网络的其他用户使用相同的用户代理点击了怎么办?)是您将使用不同的会话id值来唯一标识表中的每一行。因此,无需担心。但缺点是,每次需要DB连接并触发查询时,会话初始化时,即每个页面。

  2. 共享目录/服务器中的会话-配置所有应用程序,使所有应用程序将会话存储在共享位置。共享位置可以是目录,也可以是安全服务器。这可以通过使用session_set_save_handler轻松实现。