002thinkphp session判断

先来介绍下ThinkPHP获取URL的变量:

echo '网站根目录地址:'.__ROOT__.'<br/>';
echo '当前项目(入口文件)地址:'.__APP__.'<br/>';
echo '当前分组地址:'.__GROUP__.'<br/>';
echo '当前模块地址:'.__URL__.'<br/>';
echo '当前操作地址:'.__ACTION__.'<br/>';
echo '当前 URL 地址:'.__SELF__.'<br/>';
echo '当前操作名称:'.ACTION_NAME.'<br/>';
echo '当前项目目录:'.APP_PATH.'<br/>';
echo '当前项目名称:'.APP_NAME.'<br/>';


圈起的三个无法获取;

echo $_SERVER["REQUEST_SCHEME"].'://'.$_SERVER["SERVER_NAME"].':'.$_SERVER['SERVER_PORT'].$_SERVER["REQUEST_URI"];

结果(模板页):http://localhost:80/ackonphp/index/loginOut.html
结果(操作名全称):http://localhost:80/ackonphp/home/index/testconn

 

echo $_SERVER['HTTP_HOST'].'<br/>';
echo $_SERVER['SCRIPT_NAME'].'<br/>';
echo $_SERVER['PATH_INFO'].'<br/>';
echo $_SERVER['QUERY_STRING'].'<br/>';
echo $_SERVER['PHP_SELF'].'<br/>';

$_SERVER['QUERY_STRING']无效;

 

==================================

下面正式介绍ThinkPHP拦截器功能

class AdminController extends Controller {
    /**
     * 后台控制器初始化
     */
    public function _initialize(){

        $this->isLogin();
    }

    public function isLogin(){
        /**
         *操作前进行拦截,session不存在则返回登录页
         *在Common模块/Conf/config.php配置不拦截的内容
         */
        $array=C('LOGIN_CHECK');//不拦截的路径
        $url=__ACTION__;//当前路径
        if(!in_array($url, $array)){
            if(!session('loginUser')){
                $this->display('/login');
            }
        }
    }
    
    public function _empty(){
        try{
            if(method_exists($this,"actions")){
                //内容省略
            }else{
                throw new \Think\Exception("未定义动作类绑定");
            }
        }catch(Exception $e){
            send_http_status('404');//action不存在或动作类不合法,抛出404
        }
    }
}

LOGIN_CHECK在config.php中进行指定

//拦截器,不拦截操作
'LOGIN_CHECK'=>array(
    __ROOT__.'/Home/Index/login',
    __ROOT__.'/Home/Index/loginOut',
),

这样在每个方法前会自动去判断session,session不存在返回登录页;

问题来了,当空操作就会在页面返回登录页,后面继续执行 _empty()里的内容;
_empty()里的内容被追加在登录页;


http://localhost/ackonphp/home/index/testconn这个路径在拦截后进入登录页,但此路径的内容仍被执行,追加在登录页后;

自动执行session判断达不到相应
if(!session('loginUser')){
  return;
}
来阻止程序继续执行;
问题在于一旦session不存在应该直接进入登录页,后续操作终止;

这是由于thinkphp处理机制的问题,那么只能选择手工调用判断session的方法了。

ThinkPHP函数详解:session方法

posted @ 2016-06-15 17:00  陈&三  阅读(1219)  评论(0编辑  收藏  举报