2012-03-03 31 views
0

當用戶登錄或當他註冊,他的$_SESSION['username']得到他的用戶名的值。我想讓他們只有在註冊時才能訪問某些控制器。但我不喜歡寫這個的想法:在每個控制器我不想unloggined人們看到如果用戶登錄或不笨

function __construct() 
{ 
    session_start(); 
    if(empty($_SESSION['username'])) 
    die(); 

    parent::__construct(); 
} 

。有沒有更好的方法來做到這一點?謝謝。

回答

4

你可能會考慮延長你的控制器基類(見the Codeigniter Wiki Article on extending the class)提供require_login功能:

class MY_Controller extends CI_Controller { 

    protected function require_login() { 
    if(empty($_SESSION['username'])) 
     die(); 
    } 
    } 

一旦你有了這個,你可以調用require_login()在要保護每個控制器的構造函數:

function __construct() { 
    $this->require_login(); 
} 

最後,而不是使用PHP的超全局$_SESSION會話存儲,你可能會考慮採取笨的優勢10庫或an equivalent

+0

很酷,我喜歡這個解決方案。 – 2012-03-03 18:20:24

+0

不要忘記調用'parent :: __ construct()'。 – hakre 2012-03-03 18:22:04

+0

@hakre謝謝,很好的電話! – rjz 2012-03-03 18:24:19

1

笨有它的own session, not $_SESSION

除此之外,如果你有控制器是同一類型的,你可以寫一個基本的控制器,並從其擴展。基本控制器可能包含驗證控制器是否可訪問的代碼,並且不需要在您創建的每個控制器類中編寫該代碼。見How do I extend the code igniter controller class?

+0

'笨都有它自己的會話,而不是$ _SESSION.' - 他們做的是COOKIE,我需要會話,因爲那時人可以通過cookie更改他們的用戶名並登錄到任何帳戶。 – 2012-03-03 18:18:59

+0

這只是說。有時候問題會在這裏出現,詢問的人不知道這一點。你*可以*使用'$ _SESSION',因爲這是PHP。同樣適用於['extends'](http://de.php.net/manual/en/keyword.extends.php)。 – hakre 2012-03-03 18:21:08

+0

有可能使用本地會話超過笨的'session'庫的一些原因,但@ hakre是正確的 - 最CI是有原因的書面,這是很好的利用它,你可以。查看http://codeigniter.com/wiki/Native_session獲得一個很好的本地會話包裝 – rjz 2012-03-03 18:22:23

1

功能__construct(){

parent::Controller(); 
$this->authenticate(); 

}

function authenticate() 
{ 
    if (!$this->session->userdata('admin_loggedIn')) 
    { 
    redirect('login'); 
    } 
} 
相關問題