2015-07-31 4 views
0

У меня есть 2 контроллера (AuthController.php, AdminController.php) и одна главная страница для системы входа/регистрации. sess_destroy() находится в AuthController, и я использовал метод построения, чтобы проверить, зарегистрирован ли пользователь или нет, если он зарегистрирован в нем, перенаправляется на (AdminController/home). Я помещаю якорь на главной странице для выхода из системы (или уничтожения сеанса). проблема заключается в том, когда я нахожусь на выходе из системы, сеанс не разрушает. страница перенаправляется на (Authcontroller/login) и снова перенаправляется на (AdminController/home).не может уничтожить сеанс в codeigniter

AuthController.php:

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

class AuthController extends CI_Controller{ 

public function __construct() 
{ 
    parent::__construct(); 
    if($this->session->userdata('is_logged_in')){ 
     redirect('AdminController/home', 'refresh'); 
    } 
} 

public function index() 
{ 
    $this->login(); 
} 

public function login() 
{ 
    $data = [ 
     'title'=>'Welcome to Admin Panel', 
     'include'=>'admin/login' 
    ]; 
    $this->load->view('admin/master', $data); 
} 

public function login_validation() 
{ 
    $data = [ 
     'title' => 'Error Login' 
    ]; 

    $this->load->library('form_validation'); 

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

    if($this->form_validation->run()){ 
     $data = [ 
      'username' => $this->input->post('username'), 
      'is_logged_in' => 1 
     ]; 
     $this->session->set_userdata($data); 
     redirect('AdminController/home'); 
    }else{ 
     $this->load->view('admin/login', $data); 
    } 
} 

public function register() 
{ 
    $data = [ 
     'title' => 'Create New Account', 
     'include' => 'admin/register' 
    ]; 
    $this->load->view('admin/master', $data); 
} 

public function registration_validation() 
{ 
    $data = [ 
     'title' => 'Error Creating Account', 
    ]; 
    $this->load->library('form_validation'); 

    $this->form_validation->set_rules('name', 'Full Name', 'required|trim'); 
    $this->form_validation->set_rules('username', 'Username', 'required|trim|is_unique[users.username]'); 
    $this->form_validation->set_rules('password', 'Password', 'required|trim'); 
    $this->form_validation->set_rules('confirm_password', 'Confirm Password', 'required|trim|matches[password]'); 
    $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email|is_unique[users.email]'); 

    $this->form_validation->set_message('is_unique', 'The username or password already exist!'); 

    if($this->form_validation->run()){ 
     $this->load->model('users','',true); 
     $this->users->addUser(); 
     redirect('AuthController/index'); 
    }else{ 
     $this->load->view('admin/register', $data); 
    } 

} 

public function validate_credential() 
{ 
    $this->load->model('users'); 
    if($this->users->can_log_in()){ 
     return true; 
    }else{ 
     $this->form_validation->set_message('validate_credential', 'The username or password not exist'); 
     return false; 
    } 
} 

public function logout() 
{ 
    $this->session->sess_destroy(); 
    redirect('AuthController/login', 'refresh'); 
} 

}

AdminController.php:

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

class AdminController extends CI_Controller{ 

public function index() 
{ 
    $this->home(); 
} 

public function home() 
{ 
    $data = [ 
     'title' => 'Welcome to Admin Panel', 
     'include' => 'admin/home' 
    ]; 
    $this->load->view('admin/master', $data); 
    var_dump($this->session->userdata()); 
} 

}

master.php:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title><?= $title ?></title> 
    <link rel="stylesheet" href="<?=base_url()?>/assets/css/bootstrap.min.css"/> 
    <link rel="stylesheet" href="<?=base_url()?>/assets/css/admin.css"/> 
    <script src="<?=base_url()?>/assets/js/jquery.min.js"></script> 
    <script src="<?=base_url()?>/assets/js/bootstrap.min.js"></script> 
    <script src="<?=base_url()?>/assets/js/respond.js"></script> 
</head> 
<body> 
    <div class="container"> 
     <?php 
      echo anchor('AuthController/logout', 'LOGOUT'); 

      $this->load->view($include) 
     ?> 
    </div> 
</body> 

+0

Какую версию CI вы используете? –

ответ

0

спасибо, ребята. Я просто решил это, установив метод выхода в AdminController.

0

Вы можете попробовать с этим одним

public function logout() 
    { 
     $this->session->sess_destroy(); 
     // null the session (just in case): 
     $this->session->set_userdata(array('is_logged_in' => '')); 

     redirect('AuthController/login', 'refresh'); 
    } 
+0

Это не имеет смысла ... Сеанс, который вы только что уничтожили, не должен существовать, вы не можете добавлять к нему значения. – Narf

0

попробовать это выход из системы функции

$array_items = array('username' => ''); 
    $this->session->unset_userdata($array_items); 
Смежные вопросы