kostenloser Webspace werbefrei: lima-city


Problem mit Session-Variablen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    bdsg

    bdsg hat kostenlosen Webspace.

    Hallo,

    ich habe ein kleines Problem mit den Session-Variablen.

    Ich habe eine rudimentäre Benutzeranmeldung bei der eine Session-Variable $_SESSION [ 'LOGIN' ] = TRUE gesetzt wird.

    Rufe ich die Seite direkt nochmal auf, exisiert die Session-Variable nicht....

    if ( !isset (  $_SESSION [ 'LOGIN' ]  ) || ( isset (  $_SESSION [ 'LOGIN' ]  ) && $_SESSION [ 'LOGIN' ]  == FALSE ) ) {
         include 'html/login.php'
    }


    ... und entsprechend html/login.php aufgerufen.

    Jemand einen Hinweis/Idee für mich bitte? Danke.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. bdsg schrieb:
    ... Rufe ich die Seite direkt nochmal auf, exisiert die Session-Variable nicht....
    wo ist session_start() ????
  4. Im Prinzip würde vermutlich auch folgende vereinfachte Schreibweise deiner If-Anweisung den selben Zweck erfüllen:
    if (!$_SESSION['LOGIN']) {
        include 'html/login.php';
    }

    Aber das nur am Rande.

    Zu deiner Frage: hast du auch daran gedacht vor dem verwenden der Sessionvariablen
    session_start();
    aufzurufen?

    Beitrag zuletzt geändert: 26.1.2012 16:55:53 von alfr3d
  5. Autor dieses Themas

    bdsg

    bdsg hat kostenlosen Webspace.

    Natürlich rufe ich
    session_start();

    auf.

    alfr3d:
    In dem Login-Script wird erst die Session-Variable auf FALSE gesetzt. Erst wenn alle Routinen durch sind, wird sie auf TRUE gesetzt. Ansonsten bleibt sie FALSE. Deswegen meine if-Bedingung so.

    Gut, ich könnte noch
    unset ( $_SESSION['LOGIN'] ) ;


    aufrufen.

    Beitrag zuletzt geändert: 26.1.2012 17:04:16 von bdsg
  6. Falls $_SESSION['LOGIN'] false ist, ist die Bedingung
    !$_SESSION['LOGIN]

    true, deshalb sollte das auch funktionieren, ist ja aber auch egal, da es sich hierbei nicht um das Problem handelt.

    Hast du dir mal $_SESSION['LOGIN'] ausgeben lassen?
    Wenn ja -> was kam raus?
    Wenn nein -> mach das mal!

    Wo wird die Sessionvariable gesetzt? Bzw was passiert in "html/login.php"?

    Beitrag zuletzt geändert: 26.1.2012 19:01:31 von alfr3d
  7. was sagt

    var_dump($_SESSION)


    ?

    Ich benutze der Einfachheit halber mittlerweile

    if(array_key_exists('blablabla', $_SESSION)) {
        // ...
    }


    Beitrag zuletzt geändert: 26.1.2012 19:07:08 von fabo
  8. Autor dieses Themas

    bdsg

    bdsg hat kostenlosen Webspace.

    Hallo,

    hier mal die relevanten Teile des Quelltextes. Ich habe das Ganze übrigens mal schnell auf unserem Intranetserver in der Firma getestet, da hat das einwandfrei funktioniert.

    <?php
    	error_reporting ( E_ALL );    //Alle Fehler anzeigen
    
    	@session_start ( ) ;
    	
    	if ( !isset ( $_SESSION [ 'LOGIN'] ) ) {
    		$_SESSION [ 'LOGIN'] = FALSE ;
    	}
           // Wenn die Session-Variable nicht gesetzt ist, dann ist sie auf jeden Fall FALSE.
    
    	require 'inc/function.php';
    	require 'inc/function_formsent.php';
    ?>


    In der Datei html/login.php ist ein kleines Formular hinterlegt.

    <?php
    echo '<form action="'.$_SERVER [ 'REQUEST_URI' ].'" name="formsent_login_user" method="POST">' ;
    	echo 'Benutzername: <input type="text" name="szUser" />';
    	echo '<br />';
    	echo 'Passwort: <input type="password" name="szPassword" />';
    	echo '<br />';
    	echo '<input TYPE="submit" name="formsent_login_user" value="Anmelden"/>';
    echo '</form>';
    ?>


    In der Datei inc/function_formsent.php werden die Daten übernommen und dann mit einer Funktion verarbeitet. Da ich noch keine Datenbank zur Verfügung habe, ist der Login wirklich sehr rudimentär.

    <?php
    
    if ( isset ( $_REQUEST [ 'formsent_login_user' ] ) ) {
    	
    	$error = FALSE ;
    		
    	if ( isset ( $_REQUEST [ 'szUser' ] ) && $_REQUEST [ 'szUser' ] != '' ) {
    		$szUser = trim ( $_REQUEST [ 'szUser' ] ) ;
    	} else {
    		$error = TRUE ;
    	}
    	if ( isset ( $_REQUEST [ 'szPassword' ] ) && $_REQUEST [ 'szPassword' ] != '' ) {
    		$szPassword = trim ( $_REQUEST [ 'szPassword' ] );
    	} else {
    		$error = TRUE ;
    	}
    	
    	if ( !$error ) {
    		$_SESSION [ 'LOGIN' ] = LoginUser ( $szUser, $szPassword ) ;
    	} else {
    		$_SESSION [ 'LOGIN' ] = FALSE ;
    	}
    }
    ?>


    function LoginUser ( $szUsername, $szPassword ) {
    	
    	$szReturn = FALSE ;
    
    	if ( $szUsername == 'username' && $szPassword == 'password' ) {
    		$szReturn = TRUE ;
    	} 
    
    	return $szReturn ;
    
    }


    Fazit von dem Ganzen:

    Der Login funktioniert, die Session-Variable wird gesetzt und entsprechende Inhalt angezeigt. Sobald ich die Seite erneut aufrufe, ist die Session weg. Ich habe das Ganze aber gerade nicht mehr aktiv, also var_dump ( $_SESSION) teste ich später.

    VG
    Andreas
  9. bdsg schrieb:
    .... die Session-Variable wird gesetzt und entsprechende Inhalt angezeigt. Sobald ich die Seite erneut aufrufe, ist die Session weg ...


    klingt so, als hast Du in dem Aufruf irgendwo (unten?) ein session_destroy() stehen ?!

    mit session_destroy() löscht Du die aktuelle Session
    das sollte nur beim LogOut benutzt werden ....

    session_destroy() löscht alle in Verbindung mit der aktuellen Session stehenden Daten. Mit der Session zusammenhängende globale Variablen und das Session-Cookie werden nicht gelöscht. U


    also wenn mit cookie, dann dieses auch löschen (Ablauf-Zeit neu setzen in die Vergangenheit)

    ich glaube bei lima-city ist der SESSION cookie-Name: LCWSID

  10. Autor dieses Themas

    bdsg

    bdsg hat kostenlosen Webspace.

    cptgame schrieb:
    klingt so, als hast Du in dem Aufruf irgendwo (unten?) ein session_destroy() stehen ?!


    Ich habe definitiv kein session_destroy () verwendet.

    Nichtsdestotrotz habe ich gerade meine /html/login.php neu fertig und gehe das Thema neu an.

    VG
    Andreas
  11. Ich habe so ziemlich das gleiche Problem auf meiner Seite.
    Ich habe auch einen Login. Bei erfolgreichem Login wird die Session-Variable gesetzt.
    Das funktioniert auch: Kann die Variable ausgeben und Überprüfung mit isset ergibt true.

    Nun hab ich einen Link auf der Seite (Ziel liegt im gleichen Ordner) mit dem ich wieder mit isset überprüfe und dort ist die Variable dann nicht mehr verfügbar. Auch wenn ich die LoginSeite nochmal aufrufe ist die variable nicht mehr gesetzt. Cookie setzen hat ebenfalls nicht funktioniert.

    Muss was in htaccess oder so konfiguriert werden, dass die Sessions funktionieren?
  12. Autor dieses Themas

    bdsg

    bdsg hat kostenlosen Webspace.

    Hi,

    ich bin gerade erst dazu gekommen, da ich in letzter Zeit für mein Projektchen hatte.

    Nichtsdestotrotz habe ich meinen aktuellen Quellcode um var_dump($_SESSION) auf den entsprechenden Seiten ( html/login.php und html/home.php) erweitert und neu hoch geladen.

    Und siehe da, es funktioniert so wie es funktionieren sollte. Ich habe meinerseits also nicht viel geändert und nun geht's.





  13. bdsg schrieb:
    Nichtsdestotrotz habe ich meinen aktuellen Quellcode um var_dump($_SESSION) ..


    Wo hast du den Code hin geschrieben?am Anfang,oder ende der skripte?
  14. Autor dieses Themas

    bdsg

    bdsg hat kostenlosen Webspace.

    Einfach in die Datei, die anhand der Sessionvariable included wird.

    Schau mal auf meinen Webspace hier, Benutzername public Passwort test .
  15. Ich hatte einen anderen Fehler gemacht. Ich dachte ich dürfte nur noch nichts im body stehen haben, bevor ich session_start mache. Habe jetzt das session_start an den Anfang aller Dateien gemacht und Problem gelöst^^
  16. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!