2015-11-02 77 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