lousek
Goto Top

LDAP Login - mit Sessions oder mit Cookies?

Hallo Forum.

Ich bastle gerade an einer Testseite herum.

Jetzt will ich ein Login über LDAP.

Also habe ich angefangen herumzubasteln, herausgekommen ist bis jetzt dies:

function login_complete ($ldap_server)
{
      if((isset($_COOKIE['cookie_username']) AND ($_COOKIE['cookie_passwort']))) {  
		if (strpos($_COOKIE['cookie_username'], "@test.local") == false) {  
			$username = $_COOKIE['cookie_username']."@test.local";  
		} else {
			$username = $_COOKIE['cookie_username'];  
		}
                $passwort = $_COOKIE['cookie_passwort'];  
                $check_positive = 1;
      } else {
               if((isset($_POST['username']) OR ($_POST['passwort']))) {  
                         if(empty($_POST['username']) OR empty($_POST['passwort'])) {  
                                  $array["login_complete"] = "Bitte fuellen Sie alle Felder aus. <br>";  
                         } else {                             
                                  if((isset($_POST['username']) AND ($_POST['passwort']))) {        
					if (strpos($_POST['username'], "@test.local") == false) {  
					   $username = $_POST['username']."@test.local";  
					}
					else {
					   $username = $_POST['username'];  
					}
                                            $passwort = $_POST['passwort'];  
                                            $check_positive = 1;
                                  } 
                          }
                } else {
                          $array["login_complete"] = "Sie sind nicht eingeloggt: ";        
                }
      }


      
            if($check_positive==1) {
      //----------------------------------------Login und Bind----------------------------------------      
      if (!($connect=@ldap_connect($ldap_server))) {
            $array["login_complete"] = "Could not connect to ldap server<br>";  
      } else {
      }
      
      // Needed for W2003 AD..
      ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
      ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);
      
      if (!($bind=@ldap_bind($connect, $username, $passwort))) {
            $array["login_complete"] = "Login oder Passwort falsch. <br>";  
      } else {
            setcookie("cookie_passwort", $passwort, time()+(60));  
            setcookie("cookie_username", $username, time()+(60));  
            $array["login_check"] = true;  
      }         
}
            $array["username"] = $username;  
            $array["passwort"] = $passwort;  
            $array["connect"] = $connect;  
            return $array;
}      

Und um einen Inhalt zu "sperren" wird das angegeben:

$login = login_complete ($ldap_server);

$login_complete = $login["login_complete"];  

$username = $login["username"];  

$passwort = $login["passwort"];  

$login_check = $login["login_check"];  

$connect = $login["connect"];  

if($login_check==true) {

//Inhalt anzeigen

}

Jetzt ist es hier ja so, das man sich eigentlich jedesmal, wenn man die Seite aktualisiert oder einen Link anklickt (von der eigenen Seite face-wink ) sich neu einloggt.
D.h., jedesmal wird ja den Benutzername und Kennwort übertragen --> ganze Seite in HTTPS.

Jetzt sorgt dies doch aber für unnötig Traffic, und unötiger Beanspruchung des LDAP's und Webservers.

Ist es sinnvoller, es über Sessions zu machen?

Und da auch noch eine Frage dazu:

Man sieht häufig auf einer Seite z.B. oben rechts das Anmeldeformular (vorausgesetzt man ist nicht angemolden).

Wie läuft das dort. Wenn die ganze Seite über HTTP ist, und man dort dann seinen Username + PW eingibt, wird der ja auch in Klartext übertragen, oder wie ist das?

Ach ja, als Beispiel kann man ja diese Seite nehmen ;)

Greetz,

Lousek

Content-Key: 80318

Url: https://administrator.de/contentid/80318

Printed on: April 26, 2024 at 15:04 o'clock

Mitglied: 29457
29457 Mar 19, 2008, updated at Oct 18, 2012 at 16:35:31 (UTC)
Goto Top
hatte mal nen tuto darueber geschrieben
index.php
PHP-Code:

<?
//login script
//session beginnen, immer ganze oben vor html Ausgabe!
session_start();

//Passwort und Benutzername wird hier Manuell eingestellt
//diese Daten musst du anpassen
$user_name = "test";  
$user_pass = "123456";  

//html ausgabe der head daten einer seite
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>
<head>
<title>Login script</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>
<body><h1>Login Script</h1>';  


//login Funktionen
//post variablen einfach speichern
$user = $_POST['user'];  
$pw = $_POST['pw'];  

//nun kommen die if abfragen die das ganze relativ sicher machen
if (isset($user, $pw))
    {
    if ($user == "" OR $pw == "")  
        {
        echo "<b>Bittefülle beide Felder aus!</b>";  
        }
        elseif ($user == $user_name AND $pw == $user_pass)
            {
            $_SESSION['user'] = $user;  
            $_SESSION['pw'] = $pw;  
            echo "<b>Wunderbar! Dein Login war erfolgreich, du kannst nun <a href=\"index2.php?".sid."\">hier</a> in den Geschützen Bereich</b>";  
            }
    }

//dann kommt das Formular
if (!isset($user, $pw))
    {
    echo '<form name="login" method="post" action="'.$_SERVER['PHP_SELF'].'">  
      User Name: <input type="text" name="user"> User Passwort:  <input type="password" name="pw">  
      <input type="submit" name="Submit" value="einloggen">  
    </form>';  
    }
    


echo '</body>  
</html>';  

index2.php

PHP-Code:
//der Geschütze Bereich des Login scripts
//session beginnen, immer ganze oben vor html Ausgabe!
session_start();

//html ausgabe der head daten einer seite
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>
<head>
<title>Login script</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>
<body><h1>Login Script</h1>';  

//die if abfragen ob der user eingeloggt oder ausgeloggt ist
if (!isset($_SESSION['user'], $_SESSION['pw']))  
    {
    echo '<b>Du musst dich erst <a href="index.php">hier</a> einloggen um in den Geschützen Bereich zu kommen!</b>';  
    }
    
if (isset($_SESSION['user'], $_SESSION['pw']))  
    {
    echo "<h1>Geschützer Bereich!</h1>";  
    }
    
echo '</body>  
</html>';  
?>

Die session id wird in einem Cookie gespeichert. Fuer die die aber keine erlauben ist es wichtig bei jedem link das sid dran zu hängen

viel spaß damit. Wink



php - einfaches login script mit sessions


Rabbit