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

时间:2011-05-12 01:43:43

标签: php apache session-variables

如何将PHP会话数据从一个Apache虚拟主机传递到另一个?我目前正在运行Apache 2.2.17和PHP 5.3.3,并且我已经设置了一个主机来管理单个登录应用程序,我需要将其传递给另外两个运行单独应用程序的虚拟主机。这是我打算进一步发展的东西,但是现在传递会话数据将是最简单的。

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

  $user = new User;
  $user->set_user_session();
  Header("Location: $redirectURL");
  exit;

服务器完全由私有管理,因此多用户安全性不用担心。但是,如果有人发现任何安全问题,请告诉我。如果您知道更好的方法,请分享,我会进一步研究。我很感激帮助。

2 个答案:

答案 0 :(得分:3)

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

$sessionid = session_id();
Header("Location: $redirectURL?session=$sessionid");
exit;

然后在重定向的目标中:

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

尝试一下,让我知道它是如何工作的。

答案 1 :(得分:0)

共享会话 如果您正在讨论子域(未指定),您可以将cookie域设置为仅域,以便会话ID作为cookie传递到它们之间

session_set_cookie_params(0, '', '.domain.com');

因此,my.domain.comyour.domain.com都会获得.domain.com

的Cookie

使用任一选项,您都可以使用共享数据库或redis存储进行共享会话管理。 (通过会话存储在服务器之间共享数据)

  

只要会话存储配置对所有VMS都相同。