使用PHP在子域之间共享$ _SESSION变量

时间:2010-04-29 11:35:45

标签: php session subdomain

我试图在两个子域中共享会话变量的内容,但由于某种原因它无法正常工作。

sessionid 在两个子域上完全相同,但变量不可用。

我可以通过Cookie实现这一点,但这样做很有效,但宁可使用会话中的值。

以下是我为会话设置域名的方法:

谢谢, 斯科特

更新 抱歉应该说,我已经在使用以下内容:

ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));

if(session_id ==''){session_start();}

2 个答案:

答案 0 :(得分:3)

您正在寻找此功能:session_set_cookie_params()。 假设您有两个域:

  1. site1.example.com
  2. site2.example.com
  3. 要在两个域之间共享会话数据,请在session_start()之前调用以下函数:

    session_set_cookie_params(0, '/', '.example.com');

    (编辑:我确实忘记了示例代码中的一个点)

答案 1 :(得分:-1)

  

sessionid完全相同   两个子域名(..)

您确定sessionid的(不是名称)是否相同?

我2年前需要类似的东西,但是我需要它来处理完全不同的虚拟主机(例如,example.com和something.else.net),所以我写了一个小脚本来确保用户得到相同的{ {1}}在不同的虚拟主机上。源代码可以在http://www.misc.lv/_downloads_file.php?id=18获得,但第58行有一个小错误 - 应该交换strpos()的参数(我太懒了,不能修复它并上传固定的脚本)。

基本要求/步骤是:

  1. 所有页面应位于同一服务器上,因为它们需要会话变量的通用“存储”;
  2. 必须有一个“主要”主持人;对一些“额外”主机没有限制;
  3. 如果当前打开的页面在“主要主机”上(并且它不是session_id的请求),则不必执行任何“非常”;
  4. 如果页面不在“主要主机”上且存在活动会话,则不需要执行任何“非常”,因为session_id可能已经被共享;
  5. 如果页面不在“主要主机”上并且没有活动会话,请从“主要主机”请求session_id。