如何在两个不同的域中共享PHP会话

时间:2012-09-19 19:58:36

标签: php session dns

嗯,好了。

我的客户最近为domain1.net购买了SSL证书。 几周之后,他买了domain1.com,他认为这更好。

现在,他想使用domain1.com,但我无法将证书从domain1.net移至domain1.com,因为此时间已过期。

因此,客户端在domain1.com中导航,当他需要登录或输入信用卡信息时,我会重定向到https://domain1.net。但我需要在这两个域之间共享PHP $ _SESSION。

我该怎么做?有任何想法吗? 感谢的!

5 个答案:

答案 0 :(得分:1)

您可以将会话数据放入缓存中,这两个域都应该可以访问(不确定您在幕后有多少台服务器),然后在重定向发生后从缓存中检索会话数据。

答案 1 :(得分:0)

我认为使用$ _SESSION功能非常不顺利。问题是您将无法在两个不同的域之间传递会话ID cookie(您可以通过控制cookie域在两个子域之间传递)。您可以尝试在查询字符串中传递会话ID,但是谁想要这样做。

您可以实现自己的后端逻辑来存储两个域共有的信息,但我认为这需要您自己的令牌系统在域之间来回移动时验证用户对会话ID的替换。

您最好的选择是告诉您的客户他需要在.com域名购买证书。无论是他还是他都可以为你建立自己定制的伪会话系统付出更多的金额。

答案 2 :(得分:0)

你不能这样做,(感谢上帝)。

您必须找到另一种交换数据的方法:

  • 也许这两个站点位于同一台服务器上,可以访问公共目录。 /tmp例如,默认会话文件也是。
  • 如果不在同一台服务器上,请使用ftp,http或其他协议交换数据。

当然,最简单的解决方案是购买新证书(每年几美元)和合并网站。

答案 3 :(得分:0)

这里有很长的路要走

在两个域中创建一个php文件(share.php),数据由此方法共享

<?php session_start();
echo json_encode($_SESSION);
?>

现在在另一个域上创建另一个文件,最好用作include,以接收会话数据

<?php session_start();
$abc = file_get_contents('http://domain1.com/share.php');
$obj = json_decode($abc);

print_r($obj);

?>

print_r将以这种方式显示另一台服务器的整个会话数据。使用对象和数组的组合来访问所有元素。 如果您需要覆盖此服务器的会话,请使用此代码而不是print_r

<?php

foreach($obj as $key => $value){
$_SESSION[$key] = $value;
}

?>

答案 4 :(得分:0)

您是需要会话数据还是只需要一些登录信息?在任何一种情况下,您都可以序列化$ _SESSION(http://php.net/manual/en/function.serialize.php)或将其存储在数据库中。添加主键和“秘密”字段,您可以使用rand(0,1000000000);

填充该字段

然后,当您链接到网站时,传递主键和密码,并使用它来从数据库中获取会话信息。