Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter:无法区分管理员页面和成员页面_Php_Codeigniter_Session - Fatal编程技术网

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赋值,所以它从一开始就不起作用。谢谢!:)