普通网友 2015-07-31 09:22
浏览 38
已采纳

无法在codeigniter中销毁会话

i have 2 controllers (AuthController.php, AdminController.php) and one master page for a login/registration system. the sess_destroy() is in AuthController and i used construct method to check if the user is logged in or not, if logged in it redirect to (AdminController/home). i put an anchor in the master page to logout(or destroy session). the problem is when i click on logout the session is not destroying. the page is redirects to (Authcontroller/login) and again redirecting to (AdminController/home).

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>

  • 写回答

3条回答 默认 最新

  • doulu6234 2015-08-01 10:02
    关注

    thanks guys. i just solved this by set logout method in AdminController.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘