在子域之间共享PHP中的会话变量

在子域之间共享PHP中的会话变量,php,session,cookies,Php,Session,Cookies,我想使用许多子域在PHP中共享我的会话变量。我举了一个例子: example.com subdomain1.example.com 我尝试在两个域之间使用相同的会话变量。我已经在PHP中测试了很多函数,但都不起作用。以下是我的测试方法: 在example.com/page.php上,我有一个测试: echo '<pre>'; var_dump(session_set_cookie_params(0, '/', '.example.com')); session_start();

我想使用许多子域在PHP中共享我的会话变量。我举了一个例子:

  • example.com
  • subdomain1.example.com
我尝试在两个域之间使用相同的会话变量。我已经在PHP中测试了很多函数,但都不起作用。以下是我的测试方法:

在example.com/page.php上,我有一个测试:

echo '<pre>';
var_dump(session_set_cookie_params(0, '/', '.example.com')); 
session_start(); 
echo "Session ID : ".session_id()."\n";
$_SESSION['foo'] = 'bar';
print_r($_SESSION);
ini_set('session.cookie_domain', '.sonassi.com' );
session_name('sonassi');
session_start();
echo';
变量转储(会话集cookie参数(0,“/”,“.example.com”);
会话_start();
回显“会话ID:”.Session\u ID()。“\n”;
$\会话['foo']='bar';
打印(美元会话);
在subdomain1.example.com/page.php上,我有一个:

echo';
会话设置cookie参数(0,“/”,“.example.com”);
会话_start();
回显“会话ID:”.Session\u ID()。“\n”;
打印(美元会话);
我可以看到两个页面之间的会话id是相同的,但是在subdomain1.example.com/page.php中无法读取会话变量

我测试了很多函数,比如为会话设置一个名称,但是没有更多的结果


谢谢。

我能想到的唯一方法是将会话数据保存到cookie中,然后在访问另一个域时打开cookie。您可以在此处阅读如何执行此操作:


出于好奇,为什么要这样做?

如果要避免使用基于cookie的解决方案,并且两个域都可以访问同一个数据库,我会将会话存储在数据库中而不是文件系统中:


在php.net上的会话注释中有一个exmaple:

如果无法存储在cookie中,可以使用共享缓存层。这可以是MySQL之类的数据库,甚至可以使用APC(如果它由同一台服务器提供服务)。您也可以使用memcache。基于Memcache的会话比使用数据库更快。有关memcache会话存储的更多信息,请参见:


以下代码经过测试并正常工作,无需直接进行cookie操作(会话本身除外),也无需任何类似Memcache/DB存储的复杂操作


只需确保两个域都可以访问
会话\u save\u path

请接受您之前问题的部分答案,以激励人们回答您的问题:)
ini_set('session.cookie_domain', '.sonassi.com' );
session_name('sonassi');
session_start();