PHP会话安全密钥步骤

问题描述:

我在登录到系统后正在努力使用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; 
     } 

    } 
} 
  1. 因此,在另一个页面,我需要(再次)开始授课session和验证validate_login()
  2. 对我来说,它看起来真的很差认证。
  3. 我需要添加和改进什么?

    我已经在网上搜索,但无法找到答案,也不知道我究竟需要改进什么。

开始=>
+1

第一:我不明白你为什么只在没有会话被设置时才执行'ob_start()'?第二个'session_regenerate_id()'应该每个请求只调用一次,你的代码在'session'的每个新实例上都执行它''http://*.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

我是一个PHP开发者,所以我的答案可能毫无价值。

我想你可以信任存储在$_SESSION中的变量,因为只有服务器可以访问它们。所以你可以有一个布尔值$_SESSION['loggedIn'],让你知道用户已经成功完成了登录过程,并且这个变量可以从任何页面访问。