有关登陆验证后跳转回原验证发起页面Demo

浏览:3111 发布日期:2014/07/09 分类:技术分享 关键字: redirect参数 跳转回发 redirect方法
刚刚发布一个有关该标题的问题。没想到一个小时以后,自己解决了出来。哈哈!这都是《高效程序员》给我的启发(在工作方式上)。进入正题。
功能背景: 该功能为用户进行某操作,跳转到验证页面。验证成功后,自动跳回用户操作页面。如网络搜索查看某篇文章,用户发表评论前需要先登录。
实现方案:
1.建立通用了Controller,创建_initialize方法进行登陆验证并自动跳转到登陆验证页面。
2.Admin\Login Controller进行验证。验证成功后,跳回发起验证页面。
问题难点:
1.redirect方法需要将发起验证的页面地址传递给登录页面,为验证后跳回登陆验证发起页面。
2.在登陆验证后,跳转前。如何在Controller中获取发起登陆验证页面的链接地址。
关键实现代码:
1.通用Controller
function _initialize()
    {
        //设置编码格式
        header('Content-type:text/html;charset=UTF-8');
        
        
        if(!isset($_COOKIE['auto']))        
        {
            //$backUrl='';
            $backUrl=$this->get_url();
            $backUrl=urlencode($backUrl);
            //echo $backUrl;
            //die();
            $this->redirect('Admin/Login/Login',array('backUrl'=>$backUrl),5,'正在跳转.....');
        }
        else{
            echo "Cookie 已经设置";
            echo $_COOKIE['auto'];
    
            cookie('auto',null);
        }
        
    }
    

 /**
 * 获取当前页面完整URL地址
 */
 public function get_url() {
    $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
    $php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
    $path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
    //$relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : $path_info);
    $relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.$_SERVER['QUERY_STRING'] : $path_info);
    //return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$relate_url;
    
    return $relate_url;
 }
2.Admin Login 代码:
    public function Login($backUrl="")
    {
        header('Content-type:text/html;charset=UTF-8');
        # code...
        //$backUrl=$_GET['backUrl'];

        //echo 'backUrl'.$backUrl;
        //echo "上次访问地址:".$_SERVER['HTTP_REFERER'] ;
        $backUrl=urldecode($_GET['backUrl']);
        echo $backUrl;
        //die();
        //$this->display();
        $ip=get_client_ip();    
        cookie('auto','willa'.'|'.'accp'.'|'.$ip);    //这里只为测试 是否 通过验证跳转到验证发起页,做的伪装cookie
        redirect(urldecode($_GET['backUrl']),5,'正在跳转.....');
        //echo "this login ";
    }
以上通过 get_url() 获取了当前发起验证的页面链接地址。并通过urlencode函数将连接地址封装了一下。传递给admin login ,待验证结果进行回跳的操作。
待解决问题:
在以上两段代码中,大家会发现使用了两种形式的redirect(暂且这么称呼,我也没有十足的把我说明两者的不同。最起码的参数列表是不同的)。
第一种通过$this->redirect 调用的是TP中自带的redirect方法。可以在手册查到其相关说明。这里不多说。
第二种直接写redirect 我就不清楚是调用的哪个了。好像php内部没有redierct方法。但是直接写redirect和$this->redirect的参数还不太一样。还请哪位仁兄赐教。
最佳答案
评论( 相关
后面还有条评论,点击查看>>