2015-11-02 71 views
-1

使用:PHP MVC CI

我创建了一个控制器类的My_ControllerCore Folder名称。在此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代码?

回答

0

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

这里是更详细的如何写你的钩子。

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

+0

是,但他需要在那里,他可以写会话代码管理登录访问,以便通过使用钩,他并没有要求在每个控制器文件中写入条件。 – Mitul

+0

他还问'问题:有没有更好的地方写MVC架构中的会话代码??'这就是为什么我给答案钩是从你可以管理请求的方式。 – Mitul

0

您不必使用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; 
    } 
} 
-1

创造钩文件夹中的文件名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; 
    } 

} 
+0

如果您将此代码写入钩子文件中,则不需要在控制器中编写任何代码。每次控制器运行时,它都会首先检查会话。 – Ricky