文件:ThinkPHP\Library\Think\App.class.php
/**
* 运行应用实例 入口文件使用的快捷方法
* @access public
* @return void
*/
static public function run() {
// 应用初始化标签
Hook::listen('app_init');
App::init();
// 应用开始标签
Hook::listen('app_begin');
// Session初始化
if(!IS_CLI){
session(C('SESSION_OPTIONS'));
}
// 记录应用初始化时间
G('initTime');
App::exec();
// 应用结束标签
Hook::listen('app_end');
return ;
}果然,session初始化在app_begin标签之后……这样的话,一些要用到session的验证就不能在app_begin标签执行了,比如节点验证。但事实上,这个标签早已经能获取到action的节点了。
所以如果在app_begin标签dump一下,会发现module、controller和action都是可以获取到的,但session就获取不到了。
dump(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME);
//结果:都能获取
dump($_SESSION);
//结果:null可能是我对ThinkPHP的理解程度有限,不明白,这样设计有什么好处吗?个人觉得session初始化应该在app_begin应用开始之前完成,甚至在app_init应用初始化中就要完成。
最佳答案