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

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

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

if(C('SESSION_AUTO_START'))  session_start();

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

正确的方法应该改成

        // Session应该这样初始化
        if(C('SESSION_AUTO_START'))
        {
                import('Think.Util.Session');
                Session::_init();
                session_start();
        }

init的时候,可以设置session_name和session_path,这样就可以给不同的项目设置不同的session特征。

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

	'SESSION_AUTO_START'    => true,
	'SESSION_NAME'			=> 'tqc',
	'SESSION_PATH'          => dirname('.') .'/Data/Session',

至此,问题解决。

《thinkphp2.x中session的BUG及解决办法》有1个想法

发表评论

电子邮件地址不会被公开。