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

时间:2012-03-21 23:35:06

标签: 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(); 
echo "Session ID : ".session_id()."\n";
$_SESSION['foo'] = 'bar';
print_r($_SESSION);

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

echo '<pre>';
session_set_cookie_params(0, '/', '.example.com');
session_start();
echo "Session ID : ".session_id()."\n";
print_r($_SESSION);

我可以看到两个页面之间的会话ID是相同的,但是在subdomain1.example.com/page.php中无法读取会话变量

我测试了许多功能,比如为会话设置名称,但没有更多结果。

谢谢。

4 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是将会话数据保存到cookie,然后在访问其他域时打开cookie。您可以在此处阅读如何执行此操作:http://www.depiction.net/tutorials/php/cookies-session-variables.php

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

答案 1 :(得分:0)

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

以下是php.net会话评论中的一个例子:http://php.net/manual/en/book.session.php

答案 2 :(得分:0)

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

http://php.net/manual/en/memcached.sessions.php

答案 3 :(得分:0)

以下代码经过测试和运行,无需直接cookie操作(会话本身除外),或任何复杂的内存,如Memcache / DB存储。

ini_set('session.cookie_domain', '.sonassi.com' );
session_name('sonassi');
session_start();

确保两个域都可以访问session_save_path