Session
-
Ich habe ein paar Fragen zu Sessions, ich hab zwar schon überall rumgeschaut, aber noch nichts in der Art gefunden. Ich will eine Webseite erstellen, auf der sich die Benutzer einloggen können und dann die entsprechenden Funktionen nutzen können, hier mein Entwurf fürs einloggen:
<? @session_start(); if(isset($_session["name"]) && isset($_session["psw"])) { echo("Sie sind eingeloggt als " . $_session["name"] . " !"); } else { if(isset($psw) && isset($user)) { include("inc/db.inc.php"); $result = mysql_query("SELECT * FROM user"); while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($user == $row["name"] && $psw == $row["passwort"]) {$enter = 1;} } if($enter == 1) { $_session["user"] = $row["name"]; $_session["psw"] = $row["passwort"]; $_session["level"] = $row["level"]; header("Location: login.php?" . session_name() . "=" . session_id()); } else {die("Ihre Benutzerdaten sind falsch !!!");} } else { // Login // Variablen User und Psw werden übergeben } } ?>
Nur leider funktioniert das ganze nicht
Was mach ich falsch ?
-
im FAQ isn Beispiel, ausserdem würdich das @ am Anfang wegnehmen... wenn die Session fehlschlägt und nix mehr läuft wär das schon Vorteilhaft den Fehler zu lesen und nicht permanent "sie sind nicht eingeloggt" oder sonen mist.
-
Ok, hab mir das Bsp. angeschaut und mein Script ein wenig geändert, trotzdem funktioniert es nicht:
<? session_start(); if(session_is_registered("user") && session_is_registered("psw") && session_is_registered("level")) { echo("Sie sind eingeloggt als " . $_session["user"] . " !"); } else if(isset($psw) && isset($user)) { include("inc/db.inc.php"); $result = mysql_query("SELECT * FROM user"); while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($user == $row["name"] && $psw == $row["passwort"]) {$enter = 1;} } if($enter == 1) { $_session["user"] = $row["name"]; $_session["psw"] = $row["passwort"]; $_session["level"] = $row["level"]; header("Location: login.php"); } else {die("Ihre Benutzerdaten sind falsch !!!");} } else { // Login } ?>
-
Ich bin mir zwar grad net sicher, ob PHP Groß-/Kleinschreibung unterscheidet, aber normalerweise wird $_session großgeschrieben, also $_SESSION
Außerdem sollte man kein SELECT * machen, sondern die einzelnen Spalten aufzählen
Falls das oben genannte nicht klappt: Wo genau hängt er denn bzw. wie sieht das "funktioniert nicht" aus?
-
Ich schicke meine Logindaten ab, diese werden verarbeitet und es wird eine Session erstellt, allerdings gelange ich dann einfach wieder zurück zur Loginseite.
-
Bist du dir sicher, dass die richtig in die Session geschrieben werden?
Hast du das mit $_SESSION mal ausprobiert? Was für ne PHP Version läuft bei dir? (> 4.1.0?)
-
include("inc/db.inc.php"); $result = mysql_query("SELECT * FROM user"); while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($user == $row["name"] && $psw == $row["passwort"]) {$enter = 1;} }
Wenn mich meine Augen nicht trügen, dann holst Du Dir hier alles mögliche aus Deiner user-Tabelle raus. Warum tust Du sowas??? Wozu gibt es die WHERE-Klausel bei SQL?!
VORSCHLAG:
$query = "SELECT name,passwort FROM user WHERE name='$user' AND passwort='$psw'"; $result = mysql_query($query);
Dann solltest Du im Normalfall genau 1 Zeile oder gar keine zurückgeliefert bekommen. Dann kannst Du Deine $enter-Variable davon abhängig machen.
Und Deine $psw und $user kommen sicher aus nem Form per POST oder GET. Also wäre es schick, wenn Du da $_POST['xxx'] oder $_GET['xxx'] verwendest.Und flenders hat schon Recht, Du solltest auch tunlichst $_SESSION groß schreiben.
Und eines Sache hab ich noch. *g*
Ich weiß nicht, ob das mit session_is_registered("psw") schlechter ist, aber ich würde das so abfragen: isset($_SESSION['psw'])Falls Du php kleiner 4.1.0. hast, dann verwende statt $_ABC $HTTP_ABC_VARS
mfgr,
mid[ Dieser Beitrag wurde am 21.05.2003 um 22:24 Uhr von Midnighter editiert. ]
-
Hier wurde das ausführlich behandelt.
Und auch warum man keinen SELECT * und einen WHILE-Schleife macht.[ Dieser Beitrag wurde am 22.05.2003 um 06:33 Uhr von Unix-Tom editiert. ]
-
Ich habe das ganze nochmal überarbeitet, habe aber immer noch den alten Fehler, nachdem ich mich eingeloggt habe, gelange ich immer wieder zur Loginseite zurück, könnte da vielleicht ein Problem mit den Sessioncookies vorliegen ?
<? session_start(); if(session_is_registered('user')) { echo("Sie sind eingeloggt als " . $_SESSION["user"] . " !"); } else if(isset($psw) && isset($user)) { include("inc/db.inc.php"); $result = mysql_query("SELECT passwort, level, name FROM user WHERE name = '$user'"); $row = mysql_fetch_array($result,MYSQL_ASSOC); if (!$row) { die("Dieser Name ist leider nicht bekannt !"); } if ($row["passwort"] <> $psw) { die("Dieses Passwort passt nicht zum Usernamen !"); } $_SESSIOM["user"] = $row["name"]; $_SESSION["psw"] = $row["passwort"]; $_SESSION["level"] = $row["level"]; header("Location: login.php"); } else { // Login } ?>
-
1. elseif schreibt man zusammen
2. würde ich immer { } setzen, um die einzelnen Böcke klar zuzuordnen
-
Das hilft mir jetzt aber auch nicht, wo könnte das Problem liegen, eventuell wird die Session nicht per Cookie übertragen oder ist ne alte Version ?
-
Ich bin mir nicht sicher, ob PHP <> für ein != anerkennt. Probier ich aber jetzt auch nicht aus.
Und dann würde ich auch nicht if(!row) abfragen.<? session_start(); if(session_is_registered('user')) { echo("Sie sind eingeloggt als " . $_SESSION["user"] . " !"); } else if(isset($psw) && isset($user)) { include("inc/db.inc.php"); $result = mysql_query("SELECT passwort, level, name FROM user WHERE name = '$user'"); $row = mysql_fetch_array($result,MYSQL_ASSOC); if ( mysql_num_rows($result)==0 ) { die("Dieser Name ist leider nicht bekannt !"); } if ( $row["passwort"] != $psw ) { die("Dieses Passwort passt nicht zum Usernamen !"); } $_SESSIOM["user"] = $row["name"]; $_SESSION["psw"] = $row["passwort"]; $_SESSION["level"] = $row["level"]; header("Location: login.php"); } else { echo "Login"; } ?>
Und noch ein Vorschlag. Mach Dir mal ne weitere PHP-Seite:
check.php
<?php session_start(); print_r( $_SESSION ); ?>
Die rufst Du dann mal auf, nachdem die Session Userdaten enthalten soll.
Dann kannst Du mal checken, was überhaupt in Deiner Session steht.Was für eine PHP-Version fährst Du eigentlich???
Und nochwas, vielleicht hilft Dir das hier bei Deinen Session-Probs weiter: http://www.tool-garage.de/de/snip_ses.php
Gruß,
mid