Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Apache虚拟主机之间传输会话数据_Php_Apache_Session Variables - Fatal编程技术网

Php 在Apache虚拟主机之间传输会话数据

Php 在Apache虚拟主机之间传输会话数据,php,apache,session-variables,Php,Apache,Session Variables,如何将PHP会话数据从一个Apache虚拟主机传递到另一个?我目前运行的是Apache2.2.17和PHP5.3.3,我已经设置了一个主机来管理一个单一的登录应用程序,我需要将它传递给另外两个运行不同应用程序的虚拟主机。这是我打算进一步开发的内容,但就目前而言,传递会话数据将是最简单的 当前,此代码在SSO子域auth.domain.com中创建第一个会话,然后将用户传递回应用程序接口app.domain.com(已修剪): 服务器完全由私人管理,因此不必担心多用户安全问题。但是,如果有人看到任

如何将PHP会话数据从一个Apache虚拟主机传递到另一个?我目前运行的是Apache2.2.17和PHP5.3.3,我已经设置了一个主机来管理一个单一的登录应用程序,我需要将它传递给另外两个运行不同应用程序的虚拟主机。这是我打算进一步开发的内容,但就目前而言,传递会话数据将是最简单的

当前,此代码在SSO子域auth.domain.com中创建第一个会话,然后将用户传递回应用程序接口app.domain.com(已修剪):


服务器完全由私人管理,因此不必担心多用户安全问题。但是,如果有人看到任何安全问题,请让我知道。如果你知道一个更好的方法,请分享,我会进一步研究它。非常感谢您的帮助。

据我所知,PHP会话(默认情况下)不支持虚拟主机:您需要将会话ID作为重定向的一部分进行传递,然后在其他虚拟主机中进行设置。比如:

$sessionid = session_id();
Header("Location: $redirectURL?session=$sessionid");
exit;
然后在重定向的目标中:

session_id($_GET['session']);
session_start();

试试看,让我知道它是如何工作的。

共享会话 如果您谈论的是子域(未指定),则可以将cookie域设置为该域,以便会话ID作为cookie在它们之间传递

session_set_cookie_参数(0,,'.domain.com')

因此,
my.domain.com
your.domain.com
都将获得
.domain.com

有了这两个选项,您就可以使用共享数据库或redis存储进行共享会话管理。(通过会话存储在服务器之间共享数据)

只要所有虚拟机的会话存储配置相同

  • 同一台服务器
    • 同一物理机器上的虚拟机
    • 文件或内存中的会话存储将通过会话ID共享
  • MySQL示例
  • Redis示例

Sure thing:您必须确保您设置了
session\u id($\u GET['session'])在访问任何会话数据之前调用。我可以更改会话ID,但由于某些原因无法访问会话变量。已通过echo'ing session_id()确认,但当我尝试回显$\u session[]变量时,未设置该变量。任何PHP设置都会影响这一点吗?除非我错了,
session\u id()。另外,我假设您没有在http和https之间移动,因为有时这不太正常。确认:在任何会话函数或变量之前调用session_id()。还确认:也没有HTTP/S切换。啊:每个虚拟主机是在不同的用户id下运行,还是在相同的用户id下运行?如果它们不同,那么您可能会有文件权限错误:否则,我真的很困惑,因为通常没有任何其他原因可以解释为什么一个不能找到另一个的会话。
session_id($_GET['session']);
session_start();