thinkphp2.x中session的BUG及解决办法

很多人出现一个TP构建的APP,出现SESSION相同导致用户未经授权就登陆了其它项目,N久没有找到原因。今天晚上跟踪了一下代码,找到了问题。

主要原因在于TP在项目实例化的时候没有对SESSION进行配置就直接初始化了。
/Core/App.class.php中看到这段代码

[php]if(C(‘SESSION_AUTO_START’)) session_start();[/php]

这里的代码未考虑用户的SESSION参数设置就直接初始化了,导致所有APP的SESSION全部按同样的设置进入生产环境,就会出现session相同导致用户信息出错的问题。

正确的方法应该改成
[php]
// Session应该这样初始化
if(C(‘SESSION_AUTO_START’))
{
import(‘Think.Util.Session’);
Session::_init();
session_start();
}
[/php]
init的时候,可以设置session_name和session_path,这样就可以给不同的项目设置不同的session特征。

然后可以在项目配置文件中,添加SESSION信息的设置

[php]
‘SESSION_AUTO_START’ => true,
‘SESSION_NAME’ => ‘tqc’,
‘SESSION_PATH’ => dirname(‘.’) .’/Data/Session’,
[/php]

至此,问题解决。

发表评论

评论列表(1)

  • 王道中强流

    2011.5.4 11:05

    这都被你发现,不过 我使用中都没出现问题,神奇

    回复