2010-12-17 49 views
0

我有一個使用CodeIgniter的網站,現在已經基本完成了。我的問題是,即使我已經實現了會話並保持登錄系統,但個人可以通過在瀏覽器地址欄中輸入URL來訪問任何頁面。如何防止用codeigniter輸入url進入網站

我已經實現了病人登記會話是這樣的:

function index(){ 
    $this->is_logged_in(); 
} 

function log_out(){ 
    $this->session->sess_destroy(); 
    redirect('login_controller'); 
} 

function is_logged_in(){ 
    $is_logged_in = $this->session->userdata('is_logged_in'); 

    if(!isset($is_logged_in)||$is_logged_in!= TRUE){ 
     redirect('login_controller'); 
    }else{ 
     $this->main();  
    } 
} 

匿名用戶無法接取系統只是這樣輸入控制器名稱:

http://localhost/demo_site/index.php/register_controller

但他們可以這樣做:

http://localhost/demo_site/index.php/register_controller/search_patient

人不能通過鍵入控制器名稱的訪問,但是可以通過除了所述控制器輸入一個長URL,如上所示的一個進入系統。

這裏有什麼問題?什麼是可能的解決方案?

回答

1

聽起來像一個路由問題。您需要設置您的路線以使第二種情況非法或至少映射到與第一種情況相同的控制器。更多關於路線here

8

您必須在控制器的構造函數中實現登錄檢查。

無論何時調用控制器,都應檢查用戶是否已登錄 - 如果不是,則重定向到登錄頁面或錯誤頁面。

+0

其次。將邏輯放在控制器的構造函數中......不需要爲所有可能的路徑制定獨特的規則。 – treeface 2010-12-17 18:33:51

2

要確認如果輸入登錄檢查放一個echoexitis_logged_in()函數內部並檢查是否出現在http://localhost/demo_site/index.php/register_controller/search_patient

你可能做登錄檢查你的各模塊,因此你錯過了的情況下一些案例。

最好是定義一組私有模塊(比如說在一個數組中)並在前臺控制器本身(在一個地方)進行登錄檢查,而不是在模塊級別重複。

1

我同意tHeSiD。這段代碼應該放在構造函數中。理想情況下,在您用來擴展所有與管理相關或受限制的類的基類中。通常我使用擴展CI_Controller(2.0)或Controller(1.7.x)的Admin_Controller基類,然後通過擴展管理控制器來創建我的應用程序控制器。