Php 在验证codeigniter中的会话变量时加载了多个视图
当您调用控制器时,它将始终执行您在第二段中指定的构造函数和函数,或者默认情况下,Php 在验证codeigniter中的会话变量时加载了多个视图,php,codeigniter,session,Php,Codeigniter,Session,当您调用控制器时,它将始终执行您在第二段中指定的构造函数和函数,或者默认情况下,index() 在您的情况下,如果我们假设您的URL是 首先要执行的是调用$this->is_logged_in()的构造函数 如果我们假设登录失败,您可以通过以下调用加载视图:$this->load->view('admin_login') 这就是构造器 然后codeigniter调用默认函数index(),该函数还加载一个视图$this->load->view('admin\u login') 所以,这就是为什么
index()
在您的情况下,如果我们假设您的URL是
首先要执行的是调用$this->is_logged_in()的构造函数代码>
如果我们假设登录失败,您可以通过以下调用加载视图:$this->load->view('admin_login')代码>
这就是构造器
然后codeigniter调用默认函数index()
,该函数还加载一个视图$this->load->view('admin\u login')代码>
所以,这就是为什么您的视图出现两次
在我看来,解决这个问题的最简单方法是删除index()
中的代码。您在该函数中没有执行任何特殊操作,当构造函数被执行时,视图被加载到is\u logged\u in()
中
但是,我不明白为什么要在控制器中检查用户状态,以验证用户身份
不应该这样做,imho:
实际上,您可以检查用户是否未登录。相反,我必须检查用户是否已登录,然后重定向到管理区域或其他任何位置。
这样,index()
将是显示admin\u login
的函数,通过is\u logged\u()的构造函数将显示另一个视图。好的,谢谢……但刚才我发现我的会话不工作,因为当我获取用户名或登录数据时,什么都不会返回。请检查
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Login extends CI_Controller{
public function __construct()
{
parent::__construct();
// Your own constructor code
$this->is_logged_in();
}
function is_logged_in()
{
$is_logged_in=$this->session->userdata('is_logged_in');
if(!isset($is_logged_in) || $is_logged_in != true){
//$this->load->view('notlogin');
$this->load->view('admin_login');
//echo "you dont have permission to access this area";
}
}
function index()
{
$this->load->view('admin_login');
//die();
}
function adminlogin()
{
$this->load->model('loginmodel');
$query=$this->loginmodel->verify();
if($query==true){
$data=array(
'username'=>$this->input->post('username'),
'is_logged_in'=>true
);
$this->session->set_userdata($data);
redirect('Login/loginarea');
}
else
{
//$this->is_logged_in();
$this->index();
}
}
public function loginarea()
{
$this->load->view('mainadmin');
}
function logout()
{
$this->session->sess_destroy();
$this->index();
}
}