Php Codeigniter:无法区分管理员页面和成员页面
这是登录控制器代码:Php Codeigniter:无法区分管理员页面和成员页面,php,codeigniter,session,Php,Codeigniter,Session,这是登录控制器代码: public function login_validation(){ $this->load->library('form_validation'); $this->load->model('model_users'); $this->form_validation->set_rules('username', 'Username', 'required|trim|alpha_nume
public function login_validation(){
$this->load->library('form_validation');
$this->load->model('model_users');
$this->form_validation->set_rules('username', 'Username', 'required|trim|alpha_numeric|xss_clean|strip_tags');
$this->form_validation->set_rules('password', 'Password', 'required|md5|trim|xss_clean|strip_tags');
if ($this->form_validation->run()){
$data = array(
'username' => $this->input->post('username'),
'is_logged_in' => 1
);
if($this->model_users->get_status($data['username'])){
$data = array(
'username' => $this->input->post('username'),
'status' => 'member',
'is_logged_in' => 1
);
$this->session->set_userdata($data);
redirect('member');
} else {
$data = array(
'username' => $this->input->post('username'),
'status' => 'admin',
'is_logged_in' => 1
);
$this->session->set_userdata($data);
redirect('admin');
}
} else {
$this->login();
}
}
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Member extends CI_Controller {
public function __construct(){
parent::__construct();
if (! $this->session->userdata('is_logged_in')){
$status = $this->session->userdata('status');
if ($status == 'admin'){
redirect('main/restricted');
}
redirect('main/restricted');
}
}
public function index() {
$data = array(
'title' => 'Member Page'
);
$this->load->view("header", $data);
$this->load->view("member");
$this->load->view("nav");
$this->load->view("footer");
}
}
这是管理员控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Admin extends CI_Controller {
public function __construct(){
parent::__construct();
if (! $this->session->userdata('is_logged_in')){
$status = $this->session->userdata('status');
if ($status == 'member'){
redirect('main/restricted');
}
redirect('main/restricted');
}
}
public function index() {
$data = array(
'title' => 'Admin Page'
);
$this->load->view("header", $data);
$this->load->view("admin");
$this->load->view("nav");
$this->load->view("footer");
}
}
$status = $this->session->userdata('status')
if ($status == 'member'){
redirect('main/restricted');
}
您需要将会话状态与“成员”或“管理员”进行比较,而不仅仅是检查会话状态是否已设置。
在管理控制器中:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Admin extends CI_Controller {
public function __construct(){
parent::__construct();
if (! $this->session->userdata('is_logged_in')){
$status = $this->session->userdata('status');
if ($status == 'member'){
redirect('main/restricted');
}
redirect('main/restricted');
}
}
public function index() {
$data = array(
'title' => 'Admin Page'
);
$this->load->view("header", $data);
$this->load->view("admin");
$this->load->view("nav");
$this->load->view("footer");
}
}
$status = $this->session->userdata('status')
if ($status == 'member'){
redirect('main/restricted');
}
与成员控制器中的“admin”类似
if (! $this->session->userdata('is_logged_in'))
我认为您的if
条件返回false
您没有为其他
条件编写任何代码。请为其他
编写一些代码
如果您的If
条件为false
每个人都可以访问会员和管理员控制器
if (! $this->session->userdata('is_logged_in'))
确保您的条件返回true
我想你的代码可能是这样的
if (! $this->session->userdata('is_logged_in'))
{
//write code for not loged user
}
else
{
$status = $this->session->userdata('status');
if ($status == 'member'){
redirect('main/restricted');
}
}
你好我已经编辑了代码,但是它仍然不工作。您的会话工作吗?图书馆有货吗?我希望您已确保该会议正常进行。可能是$this->session->userdata('is_logged_in')
可能总是返回false,即使用户已登录。是的,我的会话正在工作,因为如果用户未登录并尝试访问成员或管理员页面,他/她将被重定向到受限页面。此答案似乎正确。IF语句正在检查是否已登录
会话变量是否由于逻辑“!”而不存在操作人员根据您的登录代码,只要有人成功登录,就会设置该变量,因此不会执行对状态
会话变量的任何检查,因此,任何登录的用户都可以看到这两个限制区域。我认为他的问题不在登录过程中,但是登录后的过程,即会员可以通过直接插入管理员页面URL访问管理员区域,反之亦然,我错了吗@Outliers@stormrage我的意思是,在两个控制器上执行的检查是查看会话变量是否不存在,然后由于缺少else
语句而允许访问。我提到登录代码只是因为会话变量是在登录成功时设置的,所以他的两个控制器的IF
语句永远不会检查状态
会话变量,因为当用户登录时,它们的计算结果总是为真。哦,好的,我现在知道了,是的,我让它工作了。因为我忘了给status赋值,所以它从一开始就不起作用。谢谢!:)