在codeigniter中未设置会话时,不允许访问控制器中的某些方法

时间:2015-07-07 06:08:45

标签: php codeigniter session

我希望用户在未设置会话时不访问控制器的某些方法。为此,我可以在所有方法中检查会话,如果设置了会话,那么只需转到其他地方重定向到特定页面。由于我有许多方法,如果未设置会话,我不希望用户访问。它的批量通过所有方法和检查会话。是否有任何快捷方式来获得此功能。

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

示例:

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控制器'用户转到仪表板控制器时找到会话。但是我希望能够访问仪表板控制器的某些方法。不是所有方法。每当发现会话时此代码重定向,并且不允许访问仪表板控制器的任何方法。

6 个答案:

答案 0 :(得分:13)

检查这可能会对您有所帮助

,function Controller($login, $scope){
$scope.username=[
  1. 仅param:仅存在给定函数/函数的检查会话
  2. 除了参数:不要检查给定功能/功能的会话
  3. No Param:检查控制器中所有功能的会话并重定向
  4. 您可以根据需要修改_reuired_user功能

答案 1 :(得分:4)

您可以尝试以下操作 - 如果有帮助

在您的应用程序/核心文件夹中创建一个名为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
        }
    }
}

答案 2 :(得分:4)

使用我创建的任何名称创建一个库。用户。

class Users 
{
    public function __construct()
    {
        $this->ci =& get_instance();
    }

    function _is_logged()
    {
        if(!$this->ci->session->has_userdata('unverified'))
        {
            redirect('verify_user');
        }
    }
}

加载库或将其放入application/config/autoload.php

中的自动加载

然后只需调用您想要限制的方法顶部的函数。

function abc()
{
    $this->users->_is_logged();
    // your code
}

答案 3 :(得分:4)

你能这样检查吗?

function __construct()
{
    parent::__construct();
}

function chk_login()
{
    if($this->session->userdata('logged_in'))
    {
         echo "some action";
    }
    else
    {
         redirect('login');
    }
 }

答案 4 :(得分:4)

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

作为开发人员,如果按照@ user1048123的上述答案进行操作就很容易。

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

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

答案 5 :(得分:1)

在控制器

<?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。否则如果对validity不满意,它会将$result作为NULL返回。

因此,在控制器中,您可以检查$result是否为空