关于Behavior在app_begin标签无法获取session的疑问

浏览:642 发布日期:2016/03/12 分类:求助交流
今天折腾了一下Behavior,发现在app_begin标签中无法使用session,于是看了一下源码:

文件: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应用初始化中就要完成。
最佳答案
评论( 相关
后面还有条评论,点击查看>>