2017-02-20 4 views
2

Ich habe Probleme mit PHP Login und Benutzer Validierung, nachdem sie sich an das System anmelden. Ich kenne die Grundlagen, aber ich bin mir nicht sicher, ob ich es richtig mache. Ich werde versuchen, es Schritt für Schritt zu erklären.PHP Session Sicherheitsschlüssel Schritte

  1. Ich habe ein Formular für Benutzername und Passwort.
  2. Nachdem Benutzer sie Login und Passwort eingeben, verwende ich LDAP Authentifizierung, um sie zu autorisieren. Und wenn die Authentifizierung bestanden wird, muss ich eine neue Sitzung starten.
  3. Neue Sitzung (und das ist, wo ich kämpfe).

    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'; 
        } 
    } 
    

Und meine 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. So in der anderen Seiten ich brauche eine Klasse session (wieder) zu starten und validate_login() zu validieren?
  2. Für mich sieht es wirklich schlecht Authentifizierung aus.

Was muss ich hinzufügen und verbessern?

Ich habe bereits online gesucht, konnte aber keine Antwort finden und weiß nicht, was genau ich verbessern muss.

+1

Erstens: Ich verstehe nicht, warum Sie 'ob_start()' nur tun, wenn keine Sitzung eingestellt ist? Zweite 'session_regenerate_id()' sollte nur einmal pro Anfrage aufgerufen werden, Ihr Code macht es bei jeder neuen Instanz von 'session' http://stackoverflow.com/questions/22965067/when-and-why-i-should-use-session -regenerate-id # 22965580 – JustOnUnderMillions

+0

Ich würde vorschlagen, dass Sie einmal durch das Konzept der Sitzung gehen. Alles, was Sie tun müssen, ist zu überprüfen, ob die Sitzung existiert oder nicht, wenn nicht zum Login-Bildschirm umleiten und wenn ja, dann umleiten zum Index oder wo auch immer Sie wollen. Sie können hinzufügen, dass, wenn '$ _SESSION ['logedUserName']' ist leer, dann Login-Bildschirm sonst gehen Sie voran. – Aatman

+0

@JustOnUnderMillions also, wenn ich verstehe, muss ich 'session_regenerate_id (true) aufrufen' wenn validate_login wahr ist? – user3686909

Antwort

0

Ich bin ein Anfänger in PHP, so dass meine Antwort wertlos sein könnte.

Ich denke, Sie können der Variablen vertrauen, die in $_SESSION gespeichert ist, da nur der Server auf sie zugreifen kann. Sie können also einen booleschen Wert $_SESSION['loggedIn'] haben, der Sie darüber informiert, dass der Benutzer den Anmeldevorgang erfolgreich durchlaufen hat und auf diese Variable von jeder Seite aus zugegriffen werden kann.