在同一服务器上的多个域(或子域)之间共享PHP文件和会话

时间:2016-11-15 04:12:44

标签: php session session-cookies

我在服务器上有多个站点(多个域和子域)共享相同的php文件。对于通常包含的php文件,这不是问题,但对于面向外的Web文件,在不同的域上调用php文件将丢失会话。

我不想在网站之间分享会话。如果我在两个站点上,会话功能(例如登录)必须保持独立。

所以,例如,如果我在DOMAIN1上,并且我想在DOMAIN2上调用bar.php,我想保留当前的DOMAIN1会话。

我发布的一个解决方案是将session_name传递给每个页面,然后设置会话名称。像(未经测试)的东西:

session_name($session_name);
session_set_cookie_params(0, '/', '.domain1.com');
session_start();

我提出了另一个解决方案。我在DOMAIN1上创建了一个名为shell.php的php文件。在其中我在DOMAIN2上包含php文件

注意:这只是伪代码的可读性 - 我没有正确地转义url斜杠。我还必须验证该文件是否在我的域中。

<a href="<?php echo "http://domain1/shell.php?file=root/path/to/bar.php&myvar=foo ?>">

在shell.php中:

if (isset($_GET['file'])) {
    $file = $_GET['file'];
    if (file_exists($file)){
        include($file);
    }
}

此解决方案有效。 它使用户保持DOMAIN1:并处理会话问题。另外,浏览器中的URL用于正确的站点,任何传递的$ _POST或$ _GET都可用于包含的文件。

我已经看过很多帖子,要求提供跨域和子域共享会话的解决方案,但在任何地方都没有看到过这种解决方案。我想知道我可能错过的任何缺点 - 无论是从性能还是从安全的角度来看。

0 个答案:

没有答案