PHP - 使用__construct()来检查是否有会话

时间:2016-02-05 03:18:35

标签: php session

我需要解决疑问,我留下了详细信息。

我有一个类有多个相关查询到数据库的用户数据,要访问这些方法需要验证用户是否已登录,我使用php初始化程序" __ construct()&#34 ;方法,如果用户登录则指定。

<?php
class User() 
{
    public function __construct() {

        if ( !isset($_SESSION['user']) ) {
            $data = array(
                'response' => false,
                'message'   => 'You must login to access this page'.
            );
            echo json_encode($data);
        }
    }

    public function index() {
        // The user can access if you are logged
    }

    public function edit_profile()  {
        // The user can not access if you have not logged
    }

    public function save_profile_data() {
        // The user can not access if you have not logged
    }
}
?>

我的问题:

  1. 使用 __ construct()是资源密集型的最佳选择吗?
  2. __ construct()可以安全使用,并阻止用户访问尚未指定是否存在编码会话变量的其他方法。
  3. 即如果用户调用 edit_profile()方法,并且此方法没有检查会话的代码,但我已在 __ construct()中指定,用户可以访问此方法吗?

    我希望你能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

我建议你在库文件夹中创建自己的库文件 这是类文件

class Authenticate {
    var $table;
    public function __construct()
    {
        $this->ci =& get_instance();

    }
  public function is_logged_in()
    {
        $sessionid = $this->ci->session->userdata('moderId');
        if($sessionid)
        {
        return isset($sessionid);
        }
         else if(!$sessionid) {
      redirect(base_url() . 'moderator');
 }
    }
}

在你的控制器中,使用这个函数。如果你把这个函数放在控制器的构造函数中,那么它将适用于所有方法 控制器

class B2bcategory extends CI_Controller {

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

        $this->load->model('moderator/b2bcategory_model');

        $this->authenticate->is_logged_in();
    }
}