Php 如何使用codeigniter限制移动设备登录网站

Php 如何使用codeigniter限制移动设备登录网站,php,codeigniter,mobile,login,admin,Php,Codeigniter,Mobile,Login,Admin,我正在开发Codeigniter应用程序框架,我想禁用每个用户的登录访问权限,除了移动设备上的管理员,而不是桌面上的管理员 我在控制器中尝试了用户代理库,但用户仍然通过移动设备登录 当我添加&&&$此->代理->在中是\u mobile() 但我想登录应该工作的用户和管理员在桌面和管理员只能在移动设备上登录 这里是控制器 public function __construct() { parent::__construct(); $this->load->l

我正在开发Codeigniter应用程序框架,我想禁用每个用户的登录访问权限,除了移动设备上的管理员,而不是桌面上的管理员

我在控制器中尝试了用户代理库,但用户仍然通过移动设备登录

当我添加
&&&$此->代理->在
中是\u mobile()

但我想登录应该工作的用户和管理员在桌面和管理员只能在移动设备上登录

这里是控制器

public function __construct()
 {
      parent::__construct();
      $this->load->library('session');
       $this->load->library('user_agent');

 }

 public function login() {

    $this->form_validation->set_rules('iusername', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('ipassword', 'Password', 'trim|required|xss_clean');
    $Return = array('result'=>'', 'error'=>'');

    $username = $this->input->post('iusername');
    $password = $this->input->post('ipassword');

    $Return = array('result'=>'', 'error'=>'');

    /* Server side PHP input validation */
    if($username==='') {
        $Return['error'] = "Username field is required.";
    } elseif($password===''){
        $Return['error'] = "Password field is required.";
    }
    if($Return['error']!=''){
        $this->output($Return);
    }
    $allowlist = array(
        '192.168.6.6',

    );

    $data = array(
        'username' => $username,
        'password' => $password
    );

    $result .= $this->Login_model->read_user_information($username);
    $checkusername = $result[0]->username;

    if ($result == TRUE) {

    if(!in_array($_SERVER['REMOTE_ADDR'],$allowlist) 
    && $checkusername != 'admin' && !$this->agent->is_mobile()){
         $Return['error'] = 'This login cannot be accessed from your location.';    
         $this->output($Return);    
    } 
    else {

            // Add user data in session
            $this->session->set_userdata('username', $session_data);
            $Return['result'] = 'Logged In Successfully.
            $this->output($Return);
        }   
        } else {
            $Return['error'] = "Invalid Login Credential.";
            /*Return*/
            $this->output($Return);
        }

    }

问题已修复

您的if状况存在问题。通过以下代码更新您的状况

if(in_array($_SERVER['REMOTE_ADDR'],$allowlist) && $username == 'admin' && !$this->agent->is_mobile()){
    $this->session->set_userdata('username', $session_data);
    $Return['result'] = 'Logged In Successfully'.
    $this->output($Return);
}else {
    $Return['error'] = 'This login cannot be accessed from your location.';    
    $this->output($Return);    
}

它不应该是
&&$this->mobiledetection->isMobile()
而不是
&&$这->移动检测->isMobile()
?当不是管理员并且是移动的时候,你想给出错误,对吗?还有,在那之后你有一个分号,我很确定我不应该在那里。我搞不懂你的意思?库没有正确加载??很抱歉,但是如果你不能更清楚地交流,我想我帮不了你更多的忙。你可以欺骗用户代理。即使你能做到这一点,它也不是100%可靠。我尝试过这种方法,但用户仍然可以从移动设备登录?它将工作
$这个->代理->是移动的('Android')??
@edgematrix,我已经更新了答案,现在检查一下,不,我已经更新了if条件。。。替换您的条件,前提是所有代码使用者仍然可以登录。我们可以使用取消设置或销毁会话吗?您可以同时使用这两种方法,但如果使用销毁,则所有会话都将被删除。