我在服务器上有多个站点(多个域和子域)共享相同的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都可用于包含的文件。
我已经看过很多帖子,要求提供跨域和子域共享会话的解决方案,但在任何地方都没有看到过这种解决方案。我想知道我可能错过的任何缺点 - 无论是从性能还是从安全的角度来看。