[英]Logout just redirect to login page in codeigniter
我创建了函数来控制用户的登录和注销,如下所示:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Control_auth extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library(array('session'));
$this->load->helper('url');
$this->load->model('model_user');
session_start();
}
public function index() {
$this->load->view('view_login');
}
public function check_login() {
$data = array('username' => $this->input->post('username'),
'password' => $this->input->post('password')
);
$hasil = $this->model_user->check_user($data);
if ($hasil->num_rows() == 1) {
$akses = $this->input->post('level');
foreach ($hasil->result() as $sess) {
$sess_data['logged_in'] = 'logging';
$sess_data['username'] = $sess->username;
$sess_data['level'] = $sess->level;
$this->session->set_userdata($sess_data);
}
/* administrator */
if ($this->session->userdata('level') == 1 && $akses == 'Administrator') {
redirect('administrator/control_admin');
} else {
echo " <script>alert('Gagal Login: Pilih Hak Akses');history.go(-1);</script>";
}
/* member */
if ($this->session->userdata('level') == 4 && $akses == 'User') {
redirect('control_member');
}
} else { //false
echo " <script>alert('Gagal Login: Cek username , password, dan hak akses Anda !');history.go(-1);</script>";
}
}
public function logout() {
$this->session->unset_userdata(array('username' => '', 'logged_in' => FALSE));
$this->session->userdata = array();
$this->session->sess_destroy();
redirect('control_auth');
}
}
问题是,当我注销时,它只是再次重定向到登录页面。 因此,在类似Firefox的浏览器中,单击箭头历史记录时,它仍然可以访问主页。 任何解决方案都将受到重视...
您必须在control_admin函数中添加此代码,以检查该用户是否登录。
if(!empty($this->session->userdata['username'])){
//add your code here if logged in
$this->load->view('yourpagename');
}else{
redirect('control_auth');
}
注销时只需清除缓存
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
将此代码添加到每个管理员控制器中,以进行登录验证。
//check login status if not login user will redirect to htt://heloo.com/dboxadmin.php
if(($this->session->userdata('username')!=NULL)&&($this->session->userdata('level')!=NULL)){
//user already login
//add filtering query by level user. $this->session->userdata('level');
}else{
redirect("dboxadmin.php"); //your login controller
}
//login controller
if(($this->session->userdata('username')!=NULL)&&($this->session->userdata('level')!=NULL)){
//user already login and redirect to dashboard
redirect("dashboard.php");
}else{
//add code for check, if post call login query
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
//your login query
}else{
//show login form
$this->load->view('login-form');
}
}
//logout controller add
$this->session->sess_destroy();
redirect("dboxadmin.php"); //your login controller
阅读此文档: https : //ellislab.com/codeigniter/user-guide/libraries/sessions.html
加
session_destroy();
在您的登出功能中,然后尝试...。
您可以通过创建一个助手来完成整个过程。 请检查链接https://stackoverflow.com/questions/29667810/session-timeout-in-codeigniter ,不要忘记重命名$ config ['sess_cookie_name']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.