[Php] 未在密码器中设置会话时,不允许访问控制器中的某些方法


Answers

你可以尝试以下 - 如果有帮助

在应用程序/核心文件夹中创建一个名为MY_Controller的类

class MY_Controller extends CI_Controller
{

    public function checkUserSession()
    {
        if($this->session->userdata("unverified") != FALSE) 
        {
            redirect("verify_user");
        }
        return true;
    }

}

之后,您的仪表板控制器应该看起来像

class dashboard extends MY_Controller 
{
    public function show_dashboard()
    {
        if ($this->checkUserSession())
        {
            //your code
        }
    }
}
Question

当会话未设置时,我想让用户不能访问某些控制器的方法。 为此,我可以检查所有方法中的会话,如果会话已设置,则只能继续其他重定向到特定的页面。 因为我有许多方法,我不希望用户访问如果会话没有设置。 它的大部分都要经过所有的方法和检查会话。 有什么捷径可以获得这个功能。

我试过检查会议是控制器的构造方法,但它适用于所有的方法。 但是,我只想要特定的方法来阻止会话没有设置。 怎么做。

例:

class dashboard extends CI_Controller {

 function __construct() {
    parent::__construct();
    $this->load->library('session');
    $this->load->model('dbmodel');
    $this->load->helper('url','form');


    //verified user check
    if($this->session->userdata("unverified") != FALSE) {
        redirect("verify_user");  

    }

    }
    //verified user check
}

以上代码,当用户转到仪表板控制器时,一旦发现“未验证”会话,就会重定向到verify_user控制器。 但是我想给出一些仪表板控制器的方法。 并非所有的方法。 在这个代码重定向的地方,每当会议被发现,并不给任何方法的仪表板控制器。




在控制器中

<?php
    class dashboard extends CI_Controller {

        function __construct()
        {
            parent::__construct();
            $this->load->library('session');
            $this->load->model('dbmodel');
            $this->load->helper('url','form');


        }

        public function index()
        {
            $user = $this->session->userdata("unverified")//asign session value to variauble
            $result = $this->dbmodel->check_user($user);//check user validity

        if(empty($result))
        {
            //user is not verified
            $this->load->view('unverified_loging');
        }
        else
        {
            //user is verified
            $this->load->view('verified_loging');
        }

    }

在模型中

    public function check_user($user)
    {
        $query = $this->db->query("SELECT * FROM user WHERE <argument here>");//check with database
        $result = $query->result_array();
        return $result;

    }

如果用户对validity用户满意,则将数据传递给$result 。 否则,如果不满意的话,将返回$result作为NULL

所以在控制器中,你可以检查$result是否$result




这不是一个答案,而是根据我的经验提出的建议:

作为一名开发人员,如果像@ user1048123提到的上述答案那样完成,就很容易。

但是,例如,如果您正在访问不需要会话的方法(例如:索引),但function _required_user()方法必须在显示索引之前进行处理,您必须传递较大的数组(例如:数组中的30个方法名称) 。 这将减慢不需要会话的方法的加载时间。为了获得更好的性能,检查会话是需要检查会话的方法(在每种方法中)。

这个想法可能会更老,但是当你有更多的方法或者用户更大的时候,这真的很重要。