2016-03-14 51 views
0

我正在做一個簡單的Codeigniter應用程序與會議和登錄(我對Codeigniter很新,所以爲此我的問題可能很容易專家)。一切工作正常,我使用用戶名和密碼登錄,然後我進入我的私人區域。但是,如果我在登錄時粘貼Url(http://x.x.x.x/lab/index.php/admin/dashboard),並在記錄時粘貼,我可以看到所有內容,我的意思是包含所有內容的表格。我剛剛得到這些錯誤:管理Codeigniter會話和登錄

enter image description here

這是我Loginview:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>OpediaLab</title> 
     </head> 
<body> 
    <?php echo validation_errors(); ?> 
    <?php echo form_open('Verifylogin'); ?> 

<div class="container"> 
    <div class="inputs"> 

    <label for="username">Username:</label> 
    <input class ="" type="text" size="20" id="username" placeholder="Il tuo nome utente" name="username"/> 
    <input class="btn btn-info" type="submit" value="Login" style="margin-left:100px;"/> 
    <br> 
    <label for="password">Password:</label> 
    <input class ="" type="password" size="20" id="passowrd" placeholder="La tua password" name="password" /> 

    </div> 
</div> 


    </form> 
</body> 
</html> 

這是Verifylogin控制器:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class VerifyLogin extends CI_Controller { 

function __construct() 
{ 
    parent::__construct(); 
    $this->load->model('user','',TRUE); 
    $this->load->helper('url'); 

} 

function index() 
{ 
    //This method will have the credentials validation 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('username', 'Username', 'trim|required'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required|callback_check_database'); 

    if($this->form_validation->run() == FALSE) 
    { 
    //Field validation failed. User redirected to login page 
    $this->load->view('login_view'); 
    } 
    else 
    { 
// session data 

    $username = $this->session->userdata('username'); 

//Pass it in an array to your view like 
    $data['username']=$username; 
// $this->load->view('home_view',$data); 
    $this->load->view('home_view', $data); 
    redirect(site_url('admin/dashboard'), 'refresh'); 
    } 

    // 


} 

function check_database($password) 
{ 
    //Field validation succeeded. Validate against database 
    $username = $this->input->post('username'); 

    //query the database 
    $result = $this->user->login($username, $password); 

    if($result) 
    { 

    $sess_array = array(); 
    foreach($result as $row) 
    { 
     $sess_array = array(
     'id' => $row->id, 
     'username' => $row->username 
     ); 

     $this->session->set_userdata('logged_in', $sess_array); 
    } 
    return TRUE; 
    } 
    else 
    { 
    $this->form_validation->set_message('check_database', 'Invalid username or password'); 
    return false; 
    } 
} 
} 
?> 

,這一個是默認的控制器的login.php :

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Login extends CI_Controller { 

public function __construct() 
{ 
    parent::__construct(); 

} 

public function index() 

{

if (! $this->session->userdata('logged_in')){ 

$tutti_libri = $this->libri->get_all(); 
$tutte_guide = $this->guide->get_all(); 
$tutti_video = $this->video->get_all(); 
$tutte_animazioni = $this->animazioni->get_all(); 
$tutte_registrazioni = $this->registrazioni->get_all(); 
/*$this->load->view('home_view',);*/ 

$this->load->vars(array(
    'libri' => $tutti_libri, 
    'guide' => $tutte_guide, 
    'video' => $tutti_video, 
    'animazioni' => $tutte_animazioni, 
    'registrazioni' => $tutte_registrazioni 
)); 

//$this->load->view('back/header.php'); 
$this->load->view('login_view.php'); 
//$this->load->view('back/header.php'); 
} 
else 
{ 
    echo "sessione non attiva"; 
} 

}

public function login() 
{ 

if (! $this->session->userdata('logged_in')){ 

    $tutti_libri = $this->libri->get_all(); 
    $tutte_guide = $this->guide->get_all(); 
    $tutti_video = $this->video->get_all(); 
    $tutte_animazioni = $this->animazioni->get_all(); 
    $tutte_registrazioni = $this->registrazioni->get_all(); 
    /*$this->load->view('home_view',);*/ 

    $this->load->vars(array(
     'libri' => $tutti_libri, 
     'guide' => $tutte_guide, 
     'video' => $tutti_video, 
     'animazioni' => $tutte_animazioni, 
     'registrazioni' => $tutte_registrazioni 
    )); 

    //$this->load->view('back/header.php'); 
    $this->load->view('login_view.php'); 
    //$this->load->view('back/header.php'); 
    } 
    else 
    { 
     echo "sessione non attiva"; 
    } 
} 

    function logout() 
{ 
    $this->session->unset_userdata('logged_in'); 
    session_destroy(); 
    redirect(site_url(''), 'refresh'); 

} 
} 

所以,我想說的是很簡單的,如果我的腦袋該網址我應該重定向(或保留)在login_view頁。我怎樣才能做到這一點?

回答

0

我檢查你的代碼,我沒有找到具體的錯誤,但我與你分享我的方法(這就是工作)對洛/註銷和訪問管理區:

class Login extends CI_Controller { 
function index(){ 
    if ($this->session->userdata('logged_in') == TRUE){ 
     redirect('admin'); 
    }else{ 
     $this->session->sess_destroy(); 
     $data = array('title'=> 'Login', 'main_content'=>'login'); 
     $this->load->view('login',$data); 
    }   
} 

public function submit(){ 
    if(empty($_POST['username']) || empty($_POST['password'])){ 
     $this->load->view('login',$data); 
    } 

    $this->load->model("user"); 
    $user = $this->user->login($_POST['username'],$_POST['password']); 

    if($user != false){ 
     $data = array('username' => $_POST['username'], 'logged_in' => TRUE, 'user'=>$user[0]); 
     $this->session->set_userdata($data); 
     redirect(base_url('admin')); 
    }else{ 
     ... 
    } 
} 

public function logout(){ 
    $this->session->sess_destroy(); 
    header("Location: ".base_url()); 
} 

,並在管理區域:

class Admin extends CI_Controller { 
function __construct(){  
    parent::__construct(); 
    $this->load->library('session'); 

    if(! $this->session->userdata('logged_in')){    
     redirect('login'); 
    } 

我希望它有幫助!