SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 03.07.2009, 15:21:14
Benutzerbild von frerd
frerd frerd ist offline
Anfänger
 
Registriert seit: Jul 2009
Alter: 44
Beiträge: 5
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.

Geändert von frerd (03.07.2009 um 15:23:36 Uhr)
Mit Zitat antworten
  #2  
Alt 03.07.2009, 15:29:23
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 46
Beiträge: 1.938
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

Geändert von cortex (03.07.2009 um 15:32:19 Uhr) Grund: anmerkung
Mit Zitat antworten
  #3  
Alt 03.07.2009, 15:38:29
Benutzerbild von frerd
frerd frerd ist offline
Anfänger
 
Registriert seit: Jul 2009
Alter: 44
Beiträge: 5
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
Mit Zitat antworten
  #4  
Alt 03.07.2009, 15:44:38
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 14
Beiträge: 2.269
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
Mit Zitat antworten
  #5  
Alt 03.07.2009, 15:44:52
R. Woitaschik R. Woitaschik ist offline
Anfänger
 
Registriert seit: Nov 2004
Ort: Düsseldorf
Beiträge: 99
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;
aus. Dann kannst Du sehen, ob die Variable richtig belegt ist.
Gruß
Richard
Mit Zitat antworten
  #6  
Alt 03.07.2009, 16:07:32
Benutzerbild von frerd
frerd frerd ist offline
Anfänger
 
Registriert seit: Jul 2009
Alter: 44
Beiträge: 5
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
         $logintime
=time();

         
//Session-ID erzeugen (rand()<-Zufallszahl, uniqid()<-ID erzeugen, md5()<-ID verschlüsseln

         
$token1=md5(uniqid(rand(),true));
         
$token2=md5(uniqid(rand(),true));

         
$token3=md5(uniqid(rand(),true));
         
$token4=md5(uniqid(rand(),true));

         
$zufall1=$token1.'-'.$token2;
         
$zufall1=md5($zufall1);

         
$zufall2=$token3.'-'.$token4;
         
$zufall2=md5($zufall2);

         
$sessiid=md5($zufall2.$zufall1);        //eigentliche Session-ID erzeugen

         
session_id($sessiid);                   //Session-ID setzen
         
session_start();                        //Session mit Session-ID starten

         // diverse Session-Variablen setzen und belegen

         
$_SESSION['zeit']=$logintime;           //Startzeit in Session-Variable "zeit" speichern
         
$_SESSION['eingelogt']=false;         //Session-Variable "eingelogt" auf false setzen
         
$_SESSION['s_id']=session_id();         //Session-Variable "s_id" mit der Session-ID belegen
         
$s_name=session_name();
         
$s_id=session_id();

         
$benutzer=$HTTP_POST_VARS['benutzername'];      //Benutzername in Variable schreiben
         
$pass=$HTTP_POST_VARS['passwort'];              //Passwort in Variable schreiben
         
$status=0;                                      //Berechtigung auf falsch setzen
         
$hostname=$_SERVER['HTTP_HOST'];                //Hostname ermitteln
         
$pfad=dirname($_SERVER['PHP_SELF']);            //Hostpfand ermitteln
         
$userdatei='user.csv';
         
$bol=file_exists($userdatei);                   //Existiert die Datei 'user.csv'?
         
if($bol) {
                  
$datei=fopen($userdatei,"r");           //Wenn ja, dann öffnen zum lesen
                  
if($datei) {                            //Wurde die Datei geöffnet?
                             
$dateigroesse=filesize($userdatei);     //Dateigröße ermitteln
                             
while(($data=fgetcsv($datei,$dateigroesse,";"))!=false) {       //Zeile für Zeile einlesen
                                         
if($benutzer==$data[0]) {               //Stimmt der Benutzername mit einem Datensatz überein?
                                                     
$status=1;                  //Wenn ja, dann Berechtigung auf richtig setzen
                                                     
break;                      //Schleife beenden
                                         
}
                             }
                             
fclose($datei);                 //Datei schließen
                  
}
         }
         if(
$status==1) {                                //Ist die Berechtigung richtig?
                 
if($data[0]==$benutzer) {               //Nochmals Benutzername prüfen
                         
if($data[1]==$pass) {           //Stimmt Passwort mit Datensatz überein?
                                 
$_SESSION['eingelogt']=true;

                                 
$test=file_exists('logins.txt');
                                 if(
$test) {
                                         
$offen=fopen('logins.txt','r');
                                         if(
$offen) {
                                                 
$groesse=filesize('logins.txt');
                                                 
$logins=fread($offen,$groesse);
                                                 
fclose($offen);
                                         }
                                 }
                                 
$logins++;
                                 
$test=file_exists('logins.txt');
                                 if(
$test) {
                                         
$offen=fopen('logins.txt','w');
                                         if(
$offen) {
                                                 
$output=fwrite($offen,$logins);
                                                 
fclose($offen);
                                         }
                                 }

                                 include(
'sicherheit.php');                      //Session-Sicherheit erzeugen

                                 
$_SESSION['codezeit']=$zeitpunkt;
                                 
$_SESSION['code']=$code;

                                 
header('Location: http://'.$hostname.($pfad=='/'?'':$pfad).'/start.php?'.$s_name.'='.$s_id);             //Wenn ja, dann zur Homepage weiterleiten
                                 
exit;
                         }
                         else {
                                 
session_unset();
                                 
session_destroy();
                                 
header('Location: http://'.$hostname.($pfad=='/'?'':$pfad).'/main.php');              //Wenn nicht, dann zurück?
                                 
exit;
                         }
                 }
                 else {
                         
session_unset();
                         
session_destroy();
                         
header('Location: http://'.$hostname.($pfad=='/'?'':$pfad).'/main.php');                      //Wenn nicht dann zurück?
                         
exit;
                 }
         }
         else {
                 
session_unset();
                 
session_destroy();
                 
header('Location: http://'.$hostname.($pfad=='/'?'':$pfad).'/main.php');              //Wenn nicht, dann zurück?
                 
exit;
         }

?>
und das Skript testlogin.php

PHP-Code:
<?php
         session_start
();

         
$hostname=$_SERVER['HTTP_HOST'];
         
$pfad=dirname($_SERVER['PHP_SELF']);
         
$s_name=session_name();
         
$s_id=session_id();
         if(
strpos($pfad,'hp/')>0) {
                 
$pfad=substr($pfad,0,(strpos($pfad,'hp/')+2));
         }

         if(!isset(
$_SESSION['eingelogt']) || !$_SESSION['eingelogt']) {
                 
header('Location: http://'.$hostname.($pfad=='/'?'':$pfad).'/main.php');
                 exit;
         }
         else {
                 if(
$_SESSION['codezeit']<$_SESSION['zeit'] or $_SESSION['codezeit']>time()) {
                         
header('Location: http://'.$hostname.($pfad=='/'?'':$pfad).'/main.php');
                         exit;
                 }
                 else {
                         
$bol=file_exists('sicherheit.csv');
                         if(
$bol) {
                                 
$datei=fopen('sicherheit.csv','r');
                                 if(
$datei) {
                                         
$dateigroesse=filesize('sicherheit.csv');
                                         
$status=false;
                                         while((
$data=fgetcsv($datei,$dateigroesse,';'))!=false) {
                                                 if(
$_SESSION['codezeit']==$data[0]) {
                                                         if(
$_SESSION['code']==$data[1]) {
                                                                 
$status=true;
                                                                 break;
                                                         }
                                                 }
                                         }
                                         
fclose($datei);
                                 }
                         }
                 }
         }
         if(
$status==false) {
                 
header('Location: http://'.$hostname.($pfad=='/'?'':$pfad).'/main.php');
                 exit;
         }
?>
Wo liegt jetzt der Fehler?

[mod: benutze bitte die code-Tags zur quellcode-Formatierung]

.

Geändert von cortex (03.07.2009 um 16:12:54 Uhr) Grund: forenrichtlinien
Mit Zitat antworten
  #7  
Alt 03.07.2009, 16:24:49
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 14
Beiträge: 2.269
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:
// voll überflüssig
 
$_SESSION['s_id']=session_id(); 
Alles in allem: Undurchblickbar(für mich)

Geändert von DokuLeseHemmung (03.07.2009 um 16:25:58 Uhr)
Mit Zitat antworten
  #8  
Alt 06.07.2009, 11:29:54
Benutzerbild von frerd
frerd frerd ist offline
Anfänger
 
Registriert seit: Jul 2009
Alter: 44
Beiträge: 5
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.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Sessionname geändert, keine Sessionvariablen mehr... jan0sch PHP Grundlagen 2 19.01.2008 17:32:40
F5 bzw. Browser aktualisieren ->> sessionvariablen gehen verloren!!! help halbmond PHP Grundlagen 3 07.09.2006 11:08:00


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:30:53 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.


© 2001-2023 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt