我想使用许多子域在PHP中共享我的会话变量。我有那个例子:
我尝试在两个域之间使用相同的会话变量。我已经在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中无法读取会话变量
我测试了许多功能,比如为会话设置名称,但没有更多结果。
谢谢。
答案 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会话存储的更多信息,请访问:
答案 3 :(得分:0)
以下代码经过测试和运行,无需直接cookie操作(会话本身除外),或任何复杂的内存,如Memcache / DB存储。
ini_set('session.cookie_domain', '.sonassi.com' );
session_name('sonassi');
session_start();
确保两个域都可以访问session_save_path
。