管理Codeigniter会话和登录

时间:2016-03-14 10:56:06

标签: php codeigniter session

我正在使用Sessions和Login创建一个简单的Codeigniter应用程序(我对Codeigniter非常新,所以出于这个原因,我的问题对于专家来说可能很容易)。一切正常,我使用用户名和密码登录,然后进入我的私人区域。但是,如果我在登录时复制Url(http://x.x.x.x/lab/index.php/admin/dashboard)并在我登录时粘贴,我可以看到所有内容,我的意思是所有包含内容的表。我只是得到了这些错误:

enter image description here

这是我的登录视图:

<!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页面中重定向(或保留)Url。我怎么能这样做?

1 个答案:

答案 0 :(得分: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');
    }

我希望它有所帮助!