Booleanwerte in Sessionvariablen
Ich brauche eure Hilfe!
Ich bastel mir gerade eine private Homepage auf der ich meinen Verwandten die Urlaubsbilder zum Betrachten einstellen möchte. Dazu brauch ich ein Login-System und möchte dies über Sessions ermöglichen. Zunächst habe ich eine Seite main.php mit dem Login-Formular (Post-Methode), anschließend wird login.php aufgerufen. Dort wird eine Session gestartet (funktioniert) und eine Session-Variable 'eingelogt' angelegt (funktioniert) und mit 'false' belegt (ohne Anführungszeichen, es erfolgt keine Fehlermeldung). Anschließend werden Benutzername und Passwort geprüft und bei Übereinstimmung wird die Sessionvariable 'eingelogt' mit 'true' belegt (ohne Anführungszeichen, es erfolgt keine Fehlermeldung) und auf die Seite 'start.php' weitergeleitet (header mit Session-ID). Innerhalb von 'start.php' wird über 'include' die Datei 'testlogin.php' aufgerufen. Mit ihr soll geprüft werden, ob ein erfolgreicher Login stattgefunden hat - also ob die Session-Variable 'eingelogt' existiert und mit 'true' belegt ist. Abfrage lautet: if(!isset($_SESSION['eingelogt'])||!$_SESSION['eingelogt']). Wenn nun die Variable 'eingelogt' nicht existiert oder nicht mit 'true' belegt ist, dann wird man wieder per Header auf 'main.php' weitergeleitet. Problem ist nun. Die Session wird korrekt angelegt und auch die Session-Variable 'eingelogt'. Die Variable wird auch als Booleanwert erkannt, da in der Session-Datei folgendes steht: 'eingelogt|b:1:'. Allerdings steht nach dem zweiten Doppelpunkt kein Wert und somit wird 'eingelogt' niemals 'true'. Wenn ich hingegen beim Belegen der Variable die Anführungszeichen verwende, dann steht und der Datei: 'eingelogt|s:4:"true". Der Wert wird also als String interpretiert und die Abfrage ob wird immer wahr sein, egal oben dort "true" oder "false" drinsteht. Was mache ich falsch? Ich muss dazusagen im Phase-5-html-Editor wird false und true nicht als Schlüsselwort markiert, aber bei einfacher Abfrage - $a=true; if(!$a) - korrekt behandelt. |
AW: Booleanwerte in Sessionvariablen
kenne den restlichen quelltext nicht, aber vielleicht hilft das:
if(!isset($_SESSION['eingelogt']) and !$_SESSION['eingelogt']) reichen sollte auch: if(!isset($_SESSION['eingelogt'])) cx anmerkung: isset( $x ) gibt FALSE zurück, wenn $x = null cx |
AW: Booleanwerte in Sessionvariablen
Das Problem ist wohl weniger die Abfrage, sondern eher, dass die Session-Variable weder mit 'true' noch mit 'false' belegt ist. Zumindestens, wenn ich in die Sessiondatei schaue, denn dort steht nur:
eingelogt|b:1: -> eingelogt=Variablen-Name, b=Booleanwert, 1=Länge Gegenbeispiel: eingelogt|s:4:"true" -> eingelogt=Variablen-Name, s=Stringwert, 4=Anzahl der Zeichen, "true"=Wert |
AW: Booleanwerte in Sessionvariablen
b:0; ist false
b:1; ist true Das ist schon korrekt so! Du hast dich in deinem Postig allerdings mit : und ; vertan |
AW: Booleanwerte in Sessionvariablen
Hi frerd,
der Ausdruck b:1 in der Session-Datei ist korrekt. Bedeutet "b" = boolean und 1 = true. Bei false würde hier 0 stehen. Ich kann mir nur vorstellen, das deine Session in dem Testscript nicht ankommt. Gib doch bitte in der Datei start.php den Inhalt der Session-Variablen mittels Code:
print_r $_SESSION; Gruß Richard |
AW: Booleanwerte in Sessionvariablen
Hi Woitaschik!
Habe deine Rat befolgt. Die Ausgabe lautet wie erwartet 1. Habe dann noch die Session-Variable an $a übergeben und die Abfrage if(!$a) ausgeführt mit der Ausgabe 'FALSE' bei falsch und 'TRUE' bei wahr, Ausgabe 'TRUE'. Die Variable wird also korrekt übergeben. Hier mein Login-Skript: PHP-Code:
PHP-Code:
[mod: benutze bitte die code-Tags zur quellcode-Formatierung] . |
AW: Booleanwerte in Sessionvariablen
Fürchterlicher Code !!!
Was hampelst du das mit der SessionID rum? Das kann PHP auch alleine. Schon von Funktionen und include gehört? Damit kannst du dir sicherlich die meisten der unsäglichen Weiterleitungen ersparen. PHP-Code:
|
AW: Booleanwerte in Sessionvariablen
Danke für eure schnelle Hilfe.
Habe den Fehler gefunden und behoben. Er hat sich an einer vollkommen anderen Stelle versteckt. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:00:53 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.