变量名称会覆盖会话名称

时间:2013-01-15 15:03:32

标签: php session variables overwrite

所以我有几个子域共享同一个会话吗?

在子域1(用户面板,编辑信息和内容)上:

$_SESSION['user_id'] = 4;

在子域2上(参见用户个人资料):

$user_id = 8;

返回子域1:

echo $_SESSION['user_id']; // output: 8!

$_SESSION['user_id']如何设置ID为8?

希望学习新的东西^ _ ^

2 个答案:

答案 0 :(得分:1)

您的代码并不完全清楚(您在第二个代码段中的意思是$_SESSION['user_id'] = 8;吗?),但如果您有两个共享Cookie且具有相同会话ID的子域(并使用Cookie用于会话),然后你可以修改两者之间的会话。

这可以通过在执行任何与会话相关的事情(或输出任何内容)之前设置会话cookie域,或者通过在php.ini中为cookie域设置配置选项来实现。

如果您以其他方式传递会话ID(例如URL),并在子域之间共享,则也可能发生这种情况。

答案 1 :(得分:1)

您只需执行以下操作:

$_SESSION['sub_domain1]['user_id'] = 8;
$_SESSION['sub_domain2]['user_id'] = 4;

这是一个使用Zend Framework的namespage进行句柄会话的解决方案。 您可以使用My_Session创建类__contruct($namespace),然后写入方法:getset以从密钥中获取您的值。

更新:
http://framework.zend.com/manual/1.12/en/zend.session.basic_usage.html