2017-02-20 108 views
2

我在登錄到系統後正在努力使用PHP登錄和用戶驗證。我知道基礎知識,但我不確定我是否做得對。我會盡力一步一步解釋它。PHP會話安全密鑰步驟

  1. 我有一個用戶名和密碼的表單。
  2. 用戶輸入他們的登錄名和密碼後,我使用LDAP驗證來授權他們。如果認證通過,那麼我需要開始新的會話。
  3. 新的會議(這是我奮鬥的地方)。

    if ($validation->ldap_authentication()) 
    { 
        $session = new session(); 
        $session -> login($validation->getUsername(),  $validation->logedAs(), $validation->getSID()); 
        if($session->validate_login()) 
        { 
         exit(header('Location:index2.php')); 
        } 
        else 
        { 
         echo 'error'; 
        } 
    } 
    

而且我session class

class session 
{ 
    public function __construct() 
    { 
    if(!isset($_SESSION)) 
    { 
     session_name(SESSIONNAME); 
     ob_start(); 
     session_start();  
    } else { 
     session_regenerate_id(true) ; 
    } 
} 

    public function login($sessionUserName, $logedAs, $sid) 
    { 
     $_SESSION['logedUserName'] = isset($sessionUserName) ? $sessionUserName : null; 
     $_SESSION['logedAs'] = isset($logedAs) ? $logedAs : null; 
     $_SESSION['sid'] = isset($sid) ? $sid : null; 
    } 


    public function validate_login() 
    { 
     if (!isset($_SESSION['logedUserName']) || (trim($_SESSION['logedUserName']) == '') || 
       !isset($_SESSION['logedAs']) || (trim($_SESSION['logedAs']) == '') || 
       !isset($_SESSION['sid']) || (trim($_SESSION['sid']) == '')   
        ) 
     { 
      return false; 
     } else { 
      return true; 
     } 

    } 
} 
  • 因此,在另一個頁面,我需要(再次)開始授課session和驗證validate_login()
  • 對我來說,它看起來真的很差認證。
  • 我需要添加和改進什麼?

    我已經在網上搜索,但無法找到答案,也不知道我究竟需要改進什麼。

    +1

    第一:我不明白你爲什麼只在沒有會話被設置時才執行'ob_start()'?第二個'session_regenerate_id()'應該每個請求只調用一次,你的代碼在'session'的每個新實例上都執行它''http://stackoverflow.com/questions/22965067/when-and-why-i-should-use-session -regenerate-id#22965580 – JustOnUnderMillions

    +0

    我建議你通過一次會話的概念。所有你需要做的就是檢查會話是否存在,如果不是重定向到登錄屏幕,如果是,然後重定向到索引或任何你想要的。您可以添加一個檢查,如果$ _SESSION ['logedUserName']'爲空,則登錄屏幕繼續。 – Aatman

    +0

    @JustOnUnderMillions所以如果我明白我需要調用'session_regenerate_id(true)'如果validate_login爲真? – user3686909

    回答

    0

    我是一個PHP開發者,所以我的答案可能毫無價值。

    我想你可以信任存儲在$_SESSION中的變量,因爲只有服務器可以訪問它們。所以你可以有一個布爾值$_SESSION['loggedIn'],讓你知道用戶已經成功完成了登錄過程,並且這個變量可以從任何頁面訪問。