Problem mit Session-Variablen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktuellen quellcode
anfang
aufruf
bedingung
benutzername
code
datei
entsprechende inhalt
erneut aufrufe
fehler
funktionieren
login
problem
relevanten teile
rufen
session
setzen
stehen
url
vergangenheit
-
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
bdsg schrieb:
wo ist session_start() ????
... Rufe ich die Seite direkt nochmal auf, exisiert die Session-Variable nicht.... -
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
aufzurufen?session_start();
Beitrag zuletzt geändert: 26.1.2012 16:55:53 von alfr3d -
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 -
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 -
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 -
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 -
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
-
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 -
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? -
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.
-
Einfach in die Datei, die anhand der Sessionvariable included wird.
Schau mal auf meinen Webspace hier, Benutzername public Passwort test . -
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^^
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage