2010-11-10 154 views
0

我已經開發了一個使用codeigniter登錄,但我有任何一個可以在另一個地址鍵入另一個地址並轉到另一個帳戶時遇到此問題。如何避免這種情況?請教我?登錄使用codeigniter

regrards, Rangana

+0

您的編碼方法可能存在問題。您應該限制訪問實際登錄的用戶。向我們展示一些代碼。 – 2010-11-10 07:55:27

+0

我已經提供了下面的代碼... – 2010-11-10 08:17:37

回答

2

我已經在CI與用戶身份驗證兩種方法的工作方式

你能做到在每個頁面的基礎上,通過__construct()函數,檢查用戶是否已登錄,然後相應地重定向它們。

或者您可以擴展基本控制器,以便您擁有(例如)常規控制器,不需要身份驗證的頁面,需要您登錄的「公共」控制器以及「Admin」控制器只允許某些類型的用戶。

我再次提到菲爾鱘魚這個 - extending base controllers

我也建議尋找一些驗證庫 - Ion AuthTank Auth通常被認爲非常好 - 但也有很多可用。

你的功能也相當有限 - 用戶只能做一個選項(主)。

更好的方法是

<?php 

class Foo extends Controller { 

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

     if(!isset($is_logged_in)||$is_logged_in!= TRUE) 
     { 
      redirect('login'); 
     } 
    } 
    // else, logged in..proceed 
} 

例如。

+0

非常感謝你的詳細的答案和建議...我會通過他們! – 2010-11-15 10:59:19

1

您將有用戶獲取例如指定正確的憑據登錄後創建一個會話。完成之後,您必須對每個只需登錄用戶查看的頁面進行會話檢查。

查看CI的Session Class瞭解更多信息。

+0

但我在編碼中使用了會話類?這裏是你的帖子下面的代碼,有什麼不對嗎? :( – 2010-11-10 08:18:31

+0

@rangana:您的代碼似乎很好,但請確保在登錄用戶時,爲'$ this-> session-> userdata('is_logged_in')'設置會話。 – Sarfraz 2010-11-10 08:23:24

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

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

    if(!isset($is_logged_in)||$is_logged_in!= TRUE){ 
     echo 'you are not logged in '; 
     echo anchor('login_controller','Login'); 
    }else{ 
     $this->main();  
    } 
} 

這是我如何編碼登錄

+0

請勿發佈更多信息作爲答案,只需將其添加到您原來的問題,請 – Matthew 2010-11-10 14:10:11

+0

好吧,我會這樣做...! – 2010-11-15 10:58:30

1

你說:

中的任何一個loged可以在另一個地址輸入另一個地址,然後轉到另一個帳戶

據我瞭解,當您驗證的證書時,我有這個問題您沒有在會話中存儲該用戶的ID的用戶。

您需要在每個會話中存儲該ID,以瞭解誰在查看每個頁面以及需要向他顯示什麼內容。

控制器示例:

function validate_credentials() { 
    $this->load->model('users_model'); 
    if($this->users_model->check_pass() == true) { 
     $data = array(
      'email' => $this->input->post('email'), 
      'is_logged_in' => true, 
      'user_id' => $this->users_model->get_userid() 
      ); 
     $this->session->set_userdata($data); 
    } 
} 

型號示例:

function get_userid() { 
    $this->db->where('email', $this->input->post('email')); 
    $q = $this->db->get('users'); 
    $r = $q->row(); 
    return $r->id; 
} 

現在可以動態地加載基於$內容這 - >會話級>用戶數據( 'USER_ID') ;並確定他們應該在每一頁上看到什麼。

PS:如果你想有角色,你只需要存儲在會話中增加一個「鑰匙」 =>「VAL」

希望幫助用戶角色。

+0

謝謝很詳細的解釋,也是有幫助的! – 2010-11-15 11:00:10