【发布时间】:2016-12-26 08:26:42
【问题描述】:
我在我的代码中使用了会话。当我试图注销它的工作。但是当我点击返回时,程序仍然可以再次访问管理页面。我不知道为什么。我认为它已经被摧毁了。刷新管理页面时,会话有效。程序回到主页。关键是我必须先刷新才能使我的会话顺利进行。
这是我的代码。
登录控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller{
function __construct()
{
parent::__construct();
$this->load->model('model_user'); //memasukkan file model m_login.php ke dalam controller
}
function index()
{
$session = $this->session->userdata('isLogin'); //mengabil dari session apakah sudah login atau belum
if($session == FALSE) //jika session false maka akan menampilkan halaman login
{
$this->load->view('home/index_home');
}else //jika session true maka di redirect ke halaman dashboard
{
redirect('dashboard/index');
}
}
function do_login()
{
$username = $this->input->post("uname");
$password = $this->input->post("pass");
$cek = $this->model_user->cek_user($username,md5($password)); //melakukan persamaan data dengan database
if(count($cek) == 1){ //cek data berdasarkan username & pass
foreach ($cek as $cek) {
$level = $cek['level']; //mengambil data(level/hak akses) dari database
}
$this->session->set_userdata(array(
'isLogin' => TRUE, //set data telah login
'uname' => $username, //set session username
'lvl' => $level, //set session hak akses
));
redirect('dashboard/index','refresh'); //redirect ke halaman dashboard
}else{ //jika data tidak ada yng sama dengan database
echo "<script>alert('Gagal Login!')</script>";
redirect('home','refresh');
}
}
}
仪表板控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Dashboard extends CI_Controller{
public function __construct(){
parent::__construct();
$this->auth->cek_auth();
}
public function ceklogin(){
$session = $this->session->userdata('isLogin');
if($session == FALSE)
{
$this->load->view('home/index_home');
}
}
public function index()
{
$this->ceklogin();
$stat = $this->session->userdata('lvl');
if($stat=='admin'){
$this->load->view('admin/home/index_admin',$data);
}else{
$this->load->view('member/home/index_member',$data);
}
}
public function logout()
{
$this->session->sess_destroy();
redirect('home','refresh');
}
}
文件夹库中的授权:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Auth {
public function cek_auth()
{
$this->ci =& get_instance();
$this->sesi = $this->ci->session->userdata('isLogin');
$this->hak = $this->ci->session->userdata('stat');
if($this->sesi != TRUE){
redirect('home','refresh');
exit();
}
}
public function hak_akses($kecuali="")
{
if($this->hak==$kecuali){
echo "<script>alert('Anda tidak berhak mengakses halaman ini!');</script>";
redirect('dashboard/index');
}elseif ($this->hak=="") {
echo "<script>alert('Anda belum login!');</script>";
redirect('home');
}else{
}
}
}
【问题讨论】:
-
当你使用 cek_auth 的 var_dump($this->sesi) 时你会得到什么?
-
您使用什么版本的 Codeigniter?
-
很好,让我们从一开始就说:CI v2 上的会话类不使用原生 PHP 会话。它生成自己的会话数据。它需要 (1) 您的配置文件中有一个 加密密钥 和 (2) Mcrypt 扩展 安装。我在您的代码中没有看到任何
$this->load->library('session'),您必须 (3) 自动加载会话库。 (1)、(2) 和 (3) 在您的系统中是否正常? -
是的...我已经按照你说的做了。但我的问题没有解决
标签: php codeigniter session web