2012-09-19 59 views
1

好吧,它就在这里。如何在两个不同的域中共享PHP会话

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

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

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

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

+0

会话是域特定的。有丑陋的解决方法,你可以找到使用通常的方法。 – 2012-09-19 20:01:52

+0

你可以使用一个域,原来的域名,但新的domain1.com只需要反映这一点。它可能是domain1.net的框架,但它显示地址栏中的domain1.com。 – Ozzy

+1

如果重定向登录到一个不同的域名,它会感到鱼腥 - 重定向提前 – johannes

回答

1

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

+1

那么你最终实施哪个实施? –

0

你真的很不幸运用我想的$ _SESSION功能。问题在于您无法在两个不同域之间传递会话ID Cookie(您可以通过控制Cookie域在两个子域之间传递)。您可以尝试在查询字符串中传递会话ID,但是谁愿意这样做。

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

您最好的选择是告诉您的客户他需要购买.com域名上的证书。无论是他还是他可以为您创建自己的定制伪会话系统,付出更多的代价。

+0

是的,我认为最好的方式是告诉我的客户购买一个新的证书,或使用.net域,重定向.com。 –

0

你不能那样做,(谢天谢地)。

你必须找到一个其他的方式来交换数据:

  • 也许2点是相同的服务器上,并且可以访问到一个目录下。例如/tmp,即默认会话文件也是这样。
  • 如果不在同一台服务器上,请使用ftp,http或其他协议交换数据。

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

0

这里有

很长的路要走创建一个PHP文件(share.php)在两个域下,数据是通过这种方法

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

现在,创建另一个文件,最好使用共享如包括,另一个域用于接收会话数据

<?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; 
} 

?> 
+0

是的,我认为最好的方法是购买新证书并避免使用这种代码。 –

0

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

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