tom1921: Fehler bei m Aufruf der Globalen Varibale

Beitrag lesen

Hallo,
und danke mal an alle! :-)

Ich versuche jetzt mal den kompletten Code hier zu Posten oder besser den speziellen Teil um den es sich hier dreht.
Ich vermute das es was mit dem Befehl "session_set_save_handler" zu tun hat.

Ok. der Code setzt sich aus 4 Dateien zusammen.
Prinzipiell geht es um das Thema Login
Logge dich ein und deine Session wird gespeichert

Start mit index.php was die Scripte
checkLogin.php und class.Login.php aufruft/benutzt

Schickt der User das Formuar ab, wird in der Funktion checkLoginData() geprüft, ob es sich um den richtig Benutzer handelt.
-> Die Funktion ses_write würde ich gerne in der Klasse "classLogin.php" einbauen. Momentan ist diese im Script "checkLogin.php".

Jetzt der Code
Index.php

  
<?php  
require_once "../../common.php";  
require_once "classes/class.Login.php";  
  
  
  
  
//Kopf erstellen  
System\HTML::printHead();  
//Body erstellen  
System\HTML::printBody();  
//Überschrift erstellen  
System\HTML::printHeadline("Login-Test");  
  
//Neue Instanz der Klasse 'class.Login.php' anlegen -> $Login ist das Objekt  
$LOGIN = new Scripts\Login();  
  
echo "<br />";  
echo "Eine richtige Kombination ist folgende:<br />";  
echo "Login: <b>lkwpeter</b><br />";  
echo "Passwort: <b>2FhJ1#d</b>";  
echo "<br /><br />";  
  
//Mit dem Objekt "Login" die Funktion "printLoginForm aufrufen - Übergabe welche funktion zum Check der Daten genommen werden soll.  
$LOGIN->printLoginForm("checkLogin.php");  
  
  
//Ende der Seite  
System\HTML::printFoot();  
?>  

CheckLogin.php

  
<?php  
require_once "../../common.php";  
require_once "classes/class.Login.php";  
require_once "../session/mySession.php";  
  
  
//Login-Objekt erstellen  
$LOGIN = new Scripts\Login();  
//Login-Daten checken  
$loginOK = $LOGIN->checkLoginData();  
  
//Kopf erstellen  
System\HTML::printHead();  
//Body erstellen  
System\HTML::printBody();  
//Überschrift erstellen  
System\HTML::printHeadline("Login-Test");  
  
//Prüfen, ob die Authentifizierung erfolgreich war  
if($loginOK==true){  
	echo "<span style='color:green;'>\n";  
	echo "Sie sind als";  
	echo " <b><u>".$_POST['login']."</u></b> ";  
	echo "authentifiziert worden.</span>\n";  
	echo "<br>";  
	ses_write('1234', 'data') ;  
	}  
else  
	{  
    echo "<span style='color:red;'>";  
	echo "Falsche Kombination angegeben.</span><br />\n";  
	echo "<a href='index.php'>Zum Login-Formular</a>";  
}	  
	  
  
  
//Ende der Seite  
System\HTML::printFoot();  
?>

Class Login.php

  
<?php  
  
namespace Scripts;  
  
  
  
class Login  
{  
	  
   /**  
    * Stellt ein Login-Formular dar.  
    *  
    * @param varchar Pfad des Testskriptes für den Login  
    */  
   public function printLoginForm($checkScript = null){  
  
    //PHP-Ausgabe beenden, um "reinen" HTML-Code zu schreiben  
   ?>  
    <fieldset style="padding:2px;width:180px;border:1px solid steelblue;">  
    <legend>Login</legend>  
   	<form id="noSpaces" action="<?php echo $checkScript ?>" method="post">  
   	  
   	Login:<br />  
   	<input type="text" class="standardField" name="login" size="30" maxLength="100"><br />  
   	Passwort:<br />  
   	<input type="password" class="standardField" name="password" size="30" maxLength="100"><br />  
   	<input type="submit" onFocus="blur();" class="standardSubmit" name="doLogin" value="Anmelden">  
   	<input type="reset" onFocus="blur();" class="standardSubmit" name="reset" value="Löschen">  
   	</form>  
    </fieldset>  
    <?php  	  
     	  
   }  
  
  
  
  
   /**  
    * Prüft, ob eine korrekte Benutzername-Password-Kombination  
    * eingegeben wurde.  
    *  
    * @return boolean Gibt zurück, ob der Login erfolgreich war oder nicht  
    */  
   public function checkLoginData(){  
   	  
   	//Erster Buchstabe des Loginnamens  
   	$firstChar = substr($_POST['login'],0,1);  
   	//Eingeschränkte Ergebnismenge  
   	$sql = "SELECT login,password FROM user WHERE login LIKE '".$firstChar."%'";  
   	//Direkt auf das globale Objekt zugreifen  
   	$result = $GLOBALS['DB']->query($sql);  
   	  
   	  	  
   	//Eingaben noch "trimmen" auf max. 100 Zeichen  
   	//ohne führende Leerzeichen  
   	$login    = trim(substr($_POST['login'],0,100));  
   	$password = trim(substr($_POST['password'],0,100));  
  
   	foreach($result as $combi){  
   		if(($login == $combi['login']) && (md5($password) == $combi['password'])){  
   				//korrekte Kombination  
				//require_once "../session/mySession.php";  
				echo '<br>' ; echo 'Session ID in DB schreiben - Funktion ses_write<br> <br>' ;  
   				//ses_write('1234', 'data') ;  
   				return true;  
   		}//ENDIF  
   	}//ENDFOREACH

mysession.php

  
 <?php  
  
	require_once "../../common.php"; //einbinden!!!  
  
  
    // Lifetime auf eine Stunde setzen  
    ini_set('session.gc_maxlifetime', 3600);  
    // gc mit einer Wahrscheinlichkeit von 1% aufrufen  
    ini_set('session.gc_probability', 1);  
    ini_set('session.gc_divisor', 100);  
  
    function ses_open($path, $name) {  
        return TRUE;  
    }  
  
    function ses_close() {  
        return TRUE;  
    }  
  
    function ses_read($ses_id) {  
        $sql = "SELECT ses_value FROM Sessions  
                WHERE ses_id = $ses_id";  
        $result = @mysql_query($sql);  
        // Fehler im Query, return leeren String  
        if (!$result)  
            return '';  
        // Session nicht gefunden, return leeren String  
        if (!mysql_num_rows($result))  
            return '';  
  
        // Session gefunden, return Daten der Session  
        $row = mysql_fetch_assoc($result);  
        return $row["ses_value"];  
    }  
	  
    function ses_write($ses_id, $data) {  
        $sql = "Replace INTO Sessions (ses_id, ses_time, ses_value) VALUES ('1235000', '111234', '123')";      //		('".$ses_id."', '".time()."', '".$data."')";  
		echo '--------------- <br>  print global außerhalb if: '; echo '<br>' ;  
		//print_r($GLOBALS); echo '<br>' ;  
		  
		if (isset($GLOBALS['DB'])) {  
			echo '--------------- <br>Variable DB neu ist gesetzt! <br>' ;  
			echo 'print global innerhalb if: '; echo '<br>' ;  
			//print_r($GLOBALS); echo '<br>' ;  
		}  
		$result = $GLOBALS['DB']->query($sql);  
  
		  
		return $result ;  
  
        //return (bool)@mysql_query($sql);  
    }  
  
    function ses_destroy($ses_id) {  
        $sql = "DELETE FROM Sessions WHERE ses_id = $ses_id";  
        return (bool)@mysql_query($sql);  
    }  
  
    function ses_gc($life) {  
        $ses_life = time()-$life;  
  
        $sql = "DELETE FROM Sessions  
                WHERE ses_time < ".$ses_life." ";  
        return (bool)@mysql_query($sql);  
    }  
  
	session_set_save_handler ('ses_open',  
                              'ses_close',  
                              'ses_read',  
                              'ses_write',  
                              'ses_destroy',  
                              'ses_gc');  
	  
	echo '<br> Session gestartet <br>' ;	  
	session_start();  
	  
?>