Php Codeigniter-如何避免用户在未登录的情况下进入登录页面?

Php Codeigniter-如何避免用户在未登录的情况下进入登录页面?,php,codeigniter,session,Php,Codeigniter,Session,我有一个名为login.php的控制器,如果真正的用户将被引导到另一个名为page.php的控制器中的方法profile()。 class page extends CI_Controller { function __construct() { parent::__construct(); $this->load->model('User_model', 'user_model', TRUE); $this->load

我有一个名为
login.php
的控制器,如果真正的用户将被引导到另一个名为
page.php
的控制器中的方法
profile()。
class page extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('User_model', 'user_model', TRUE);
        $this->load->library('form_validation');    
        $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
        $this->status = $this->config->item('status'); 
        $this->roles = $this->config->item('roles');
    }

    function index() {
        $this->load->view('page_header');
        $this->load->view('content_front');
        $this->load->view('page_footer');
    }


    function login() {
        $this->load->view('page_header');
        $this->load->view('content_login');
        $this->load->view('page_footer');
    }

    function register() {

       $this->load->view('page_header');
       $this->load->view('content_register');
       $this->load->view('page_footer');

   }  


    function profile(){

        $this->load->view('page_header');
        $this->load->view('content_profile');
        $this->load->view('page_footer');

    }

    function success() {
        $this->load->view('page_header');
        $this->load->view('content_success');
        $this->load->view('page_footer');
    }

    function logout()
    {
            //destroy session
        $data = array('login' => '', 'uname' => '', 'uid' => '');
        $this->session->unset_userdata($data);
        $this->session->sess_destroy();

        redirect('page/index');
    }


}


?>
在该方法中,
profile()
方法仅包含加载用户配置文件视图的命令。

所以路线是这样的:
主页->登录->profie
但是当我试图通过url绕过登录过程时,就像这样
主页->配置文件
系统仍然接受这一点。如果用户未登录,我如何制定用户不能打开配置文件的规则

这是控制器:

page.php
class page extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('User_model', 'user_model', TRUE);
        $this->load->library('form_validation');    
        $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
        $this->status = $this->config->item('status'); 
        $this->roles = $this->config->item('roles');
    }

    function index() {
        $this->load->view('page_header');
        $this->load->view('content_front');
        $this->load->view('page_footer');
    }


    function login() {
        $this->load->view('page_header');
        $this->load->view('content_login');
        $this->load->view('page_footer');
    }

    function register() {

       $this->load->view('page_header');
       $this->load->view('content_register');
       $this->load->view('page_footer');

   }  


    function profile(){

        $this->load->view('page_header');
        $this->load->view('content_profile');
        $this->load->view('page_footer');

    }

    function success() {
        $this->load->view('page_header');
        $this->load->view('content_success');
        $this->load->view('page_footer');
    }

    function logout()
    {
            //destroy session
        $data = array('login' => '', 'uname' => '', 'uid' => '');
        $this->session->unset_userdata($data);
        $this->session->sess_destroy();

        redirect('page/index');
    }


}


?>
类页扩展CI_控制器{
函数_u构造(){
父项::_构造();
$this->load->model('User\u model','User\u model',TRUE);
$this->load->library('form_validation');
$this->form_validation->set_error_分隔符(“”,);
$this->status=$this->config->item('status');
$this->roles=$this->config->item('roles');
}
函数索引(){
$this->load->view('page_header');
$this->load->view('content_front');
$this->load->view('page_footer');
}
函数登录(){
$this->load->view('page_header');
$this->load->view('content_login');
$this->load->view('page_footer');
}
函数寄存器(){
$this->load->view('page_header');
$this->load->view('content_register');
$this->load->view('page_footer');
}  
函数配置文件(){
$this->load->view('page_header');
$this->load->view('content_profile');
$this->load->view('page_footer');
}
函数成功(){
$this->load->view('page_header');
$this->load->view('content_success');
$this->load->view('page_footer');
}
函数注销()
{
//销毁会话
$data=array('login'=>'','uname'=>'','uid'=>'';
$this->session->unset_userdata($data);
$this->session->sess_destroy();
重定向(“页面/索引”);
}
}
?>
login.php

<?php

class Login extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form','url','html','security'));
        $this->load->library(array('session','form_validation'));
        $this->load->database();
        $this->load->model('user_model');
    }

    function index()
    {
        //get form input
        $username = $this->input->post('username');
        $password = $this->input->post('password');

        //form validation
        $this->form_validation->set_rules('username','username','trim|required|xss_clean');
        $this->form_validation->set_rules('password','Password','trim|required|xss_clean');

        if($this->form_validation->run() == FALSE)
        {
            //validation fail
            $this->load->view('content_login');
        }
        else
        {
            //check user credentials
            $uresult = $this->user_model->get_user($username, $password);
            if(count($uresult)>0)
            {
                //set session
                $sess_data = array('login' => TRUE, 'uname' => $uresult[0]->username,'uid' => $uresult[0]->id);
                $this->session->set_userdata($sess_data);
                $this->load->library('../controllers/page');
                $this->page->profile();
            }
            else
            {
                $this->session->set_flashdata('msg','<div class = "alert alert-danger text-center">Wrong Email/Password</div>');
                $this->load->library('../controllers/page');
                $this->page->login();

            }
        }
    }
}

?>

在显示该页面之前,您应该检查该会话是否存在,如
if($this->session->userdata('username'))
。如果存在,则显示该页面,如果不显示任何警告。

在显示该页面之前,您应该检查该会话是否存在,如
If($this->session->userdata('username'))
。如果存在,则显示该页面,如果不显示任何警告。

您可以尝试

if ($this->session->userdata('login') == true) {
   redirect('controller');
}
登录控制器

<?php

class Login extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form','url','html','security'));
        $this->load->library(array('session','form_validation'));
        $this->load->database();
        $this->load->model('user_model');
    }

    function index()
    {

     if ($this->session->userdata('login') == true) {
        redirect('controller');
      }
        //get form input
        $username = $this->input->post('username');
        $password = $this->input->post('password');

        //form validation
        $this->form_validation->set_rules('username','username','trim|required|xss_clean');
        $this->form_validation->set_rules('password','Password','trim|required|xss_clean');

        if($this->form_validation->run() == FALSE)
        {
            //validation fail
            $this->load->view('content_login');
        }
        else
        {
            //check user credentials
            $uresult = $this->user_model->get_user($username, $password);
            if(count($uresult)>0)
            {
                //set session
                $sess_data = array('login' => TRUE, 'uname' => $uresult[0]->username,'uid' => $uresult[0]->id);
                $this->session->set_userdata($sess_data);
                $this->load->library('../controllers/page');
                $this->page->profile();
            }
            else
            {
                $this->session->set_flashdata('msg','<div class = "alert alert-danger text-center">Wrong Email/Password</div>');
                $this->load->library('../controllers/page');
                $this->page->login();

            }
        }
    }
}
您可以试试

if ($this->session->userdata('login') == true) {
   redirect('controller');
}
登录控制器

<?php

class Login extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form','url','html','security'));
        $this->load->library(array('session','form_validation'));
        $this->load->database();
        $this->load->model('user_model');
    }

    function index()
    {

     if ($this->session->userdata('login') == true) {
        redirect('controller');
      }
        //get form input
        $username = $this->input->post('username');
        $password = $this->input->post('password');

        //form validation
        $this->form_validation->set_rules('username','username','trim|required|xss_clean');
        $this->form_validation->set_rules('password','Password','trim|required|xss_clean');

        if($this->form_validation->run() == FALSE)
        {
            //validation fail
            $this->load->view('content_login');
        }
        else
        {
            //check user credentials
            $uresult = $this->user_model->get_user($username, $password);
            if(count($uresult)>0)
            {
                //set session
                $sess_data = array('login' => TRUE, 'uname' => $uresult[0]->username,'uid' => $uresult[0]->id);
                $this->session->set_userdata($sess_data);
                $this->load->library('../controllers/page');
                $this->page->profile();
            }
            else
            {
                $this->session->set_flashdata('msg','<div class = "alert alert-danger text-center">Wrong Email/Password</div>');
                $this->load->library('../controllers/page');
                $this->page->login();

            }
        }
    }
}

为每个适用的控制器添加构造函数。
让构造函数检查用户是否登录,可能是通过检查特定会话是否存在。如果它没有重定向到登录页面

像下面这样

   function __construct(){
        parent::__construct();
        if(!$this->session->userdata('userid')){
            redirect('user/login');
        }
    }

为每个适用的控制器添加构造函数。 让构造函数检查用户是否登录,可能是通过检查特定会话是否存在。如果它没有重定向到登录页面

像下面这样

   function __construct(){
        parent::__construct();
        if(!$this->session->userdata('userid')){
            redirect('user/login');
        }
    }

例如,如果不希望用户在没有登录的情况下输入函数,可以在类的构造函数中检查会话


如果只是针对特定函数,您也可以直接在函数中检查会话。

例如,如果您不希望用户在未登录的情况下输入函数,您可以在类的构造函数中检查会话


如果只是针对特定函数,您也可以直接在函数中检查会话。

创建一个帮助文件login\u helper.php

function check_login( $session ) {
     $CI =& get_instance();
     $CI->load->helper('url');
     if(!$session->userdata('login')){
         redirect(base_url());
     }

}
现在,在必须登录的控制器中使用此帮助器函数

class page extends CI_Controller {

function __construct() {
    parent::__construct();
    $this->load->model('User_model', 'user_model', TRUE);
    $this->load->library('form_validation');    
    $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
    $this->status = $this->config->item('status'); 
    $this->roles = $this->config->item('roles');
}

function index() {
    $this->load->view('page_header');
    $this->load->view('content_front');
    $this->load->view('page_footer');
}


function login() {
    $this->load->view('page_header');
    $this->load->view('content_login');
    $this->load->view('page_footer');
}

function register() {

   $this->load->view('page_header');
   $this->load->view('content_register');
   $this->load->view('page_footer');

}  


function profile(){
    check_login();
    $this->load->view('page_header');
    $this->load->view('content_profile');
    $this->load->view('page_footer');

}

function success() {
    $this->load->view('page_header');
    $this->load->view('content_success');
    $this->load->view('page_footer');
}

function logout()
{
        //destroy session
    $data = array('login' => '', 'uname' => '', 'uid' => '');
    $this->session->unset_userdata($data);
    $this->session->sess_destroy();

    redirect('page/index');
}


}
?>

创建一个帮助文件login\u helper.php

function check_login( $session ) {
     $CI =& get_instance();
     $CI->load->helper('url');
     if(!$session->userdata('login')){
         redirect(base_url());
     }

}
现在,在必须登录的控制器中使用此帮助器函数

class page extends CI_Controller {

function __construct() {
    parent::__construct();
    $this->load->model('User_model', 'user_model', TRUE);
    $this->load->library('form_validation');    
    $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
    $this->status = $this->config->item('status'); 
    $this->roles = $this->config->item('roles');
}

function index() {
    $this->load->view('page_header');
    $this->load->view('content_front');
    $this->load->view('page_footer');
}


function login() {
    $this->load->view('page_header');
    $this->load->view('content_login');
    $this->load->view('page_footer');
}

function register() {

   $this->load->view('page_header');
   $this->load->view('content_register');
   $this->load->view('page_footer');

}  


function profile(){
    check_login();
    $this->load->view('page_header');
    $this->load->view('content_profile');
    $this->load->view('page_footer');

}

function success() {
    $this->load->view('page_header');
    $this->load->view('content_success');
    $this->load->view('page_footer');
}

function logout()
{
        //destroy session
    $data = array('login' => '', 'uname' => '', 'uid' => '');
    $this->session->unset_userdata($data);
    $this->session->sess_destroy();

    redirect('page/index');
}


}
?>

在不希望在未登录时访问的页面顶部使用此选项(假设您已经设置了会话数据)


在不希望在未登录时访问的页面顶部使用此选项(假设您已经设置了会话数据)


if($this->session->userdata('logged_in')==FALSE){
$this->session->set_flashdata('error','

请登录查看此页面。

); 重定向('login_c'); 出口 }
if($this->session->userdata('logged_in')==FALSE){
$this->session->set_flashdata('error','

请登录查看此页面。

); 重定向('login_c'); 出口 }
您可以使用会话概念。请检查该会话是否存在。请检查并确认您可以使用会话概念。请检查该会话是否存在。请检查并确认欢迎使用堆栈溢出!感谢您提供的代码片段,它可能会提供一些有限的、即时的帮助。一个恰当的解释将通过描述为什么这是一个很好的问题解决方案来极大地改进its,并将使它对未来有其他类似问题的读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设。欢迎使用堆栈溢出!感谢您提供的代码片段,它可能会提供一些有限的、即时的帮助。一个恰当的解释将通过描述为什么这是一个很好的问题解决方案来极大地改进its,并将使它对未来有其他类似问题的读者更有用。请编辑您的答案,添加一些解释,包括您所做的假设。