【问题标题】:Best Location to write the Session code to check if Session Exists编写会话代码以检查会话是否存在的最佳位置
【发布时间】:2015-11-02 03:59:23
【问题描述】:

使用:PHP MVC CI

我在Core Folder 中创建了一个名称为My_Controller 的Controller 类。在这个class 中,正在检查session 是否存在。这个controller 正在所有控制器类中扩展。这是代码

<?php
    class My_Controller extends CI_Controller {

        function __construct()
        {
            parent::__construct();      
            $this->load->library('session')
            if(empty($this->session->userdata('userName')) {
                header('Location: '."Login Url");
            }
        }
    }
?>

问题:有没有更好的位置在 MVC 架构中编写 Session 代码??

【问题讨论】:

    标签: php codeigniter codeigniter-2 codeigniter-3


    【解决方案1】:

    您不必使用session_start();

    在控制器中

    class My_Controller extends CI_Controller {
    
        function __construct()
        {
            parent::__construct();      
    
        }
    
        public function index($value)
        {
            $session = $this->model_name->check_session();
            if($session==true){
                #valid code         
            }
            else{
                redirect('controller/method');
            }
        }
    }
    

    在模型中

    public function log_in()
    {
        $log = $this->session->all_userdata();
    
        if (isset($log['userName'])) {
            return true;
        } else {
            return false;
        }
    }
    

    【讨论】:

      【解决方案2】:

      您需要在 CI 中创建钩子并检查那里的会话。 Hook 会调用每个请求,这样你就可以在那里写权限角色。

      这里更详细地介绍了如何编写钩子。

      http://www.codeigniter.com/user_guide/general/hooks.html

      【讨论】:

      • 是的,但是他需要在哪里编写会话代码来管理登录访问,因此通过使用钩子,他不需要在每个控制器文件中编写条件。
      • 他还问Question: Is there any better location to write the Session code in MVC Architecture ?? 这就是为什么我给 ans hook 是您可以管理请求的方式。
      【解决方案3】:

      在 hook 文件夹中创建一个文件名 auth_hook.php 并编写此代码

      <?php
      
      if (!defined('BASEPATH'))
          exit('No direct script access allowed');
      
      class Auth_hook extends CI_Controller {
      
          private $CI;
      
          public function __construct() {
              $this->CI = & get_instance();
          }
      
          public function is_authorized() {
              $uri = $this->CI->uri->segment(1);
              if (strcmp($uri, 'user') && $uri != '') {
      
                  if ($this->CI->session->userdata('logged_in')) {
                      return true;
                  } else {
                      redirect(site_url('user'));
                  }
                  return true;
              }
              return true;
          }
      
      }
      

      【讨论】:

      • 如果您将在挂钩文件中编写此代码,则无需在控制器中编写任何代码。每次您的控制器运行时,它都会首先检查会话。
      猜你喜欢
      • 2011-12-29
      • 2018-04-04
      • 2013-02-26
      • 2013-05-22
      • 2011-02-18
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多