Benney Geschrieben 30. September 2011 Geschrieben 30. September 2011 Hallo, unzwar hab folgendes Problem, ich will ein Login Bereich machen, wenn sich der User anmeldet soll die session id in der Datenbank speichern. soweit funktioniert auch alles aber wie mache ich es das die session id wieder aus der Datenbank gelöscht wird wenn der User logout drückt. Ich Post euch mal meinen code, des Problem ist das ich auf die Variable auf den ersten IF nicht zugreifen kann. ---------------------------------------------------------------------------------------- if (isset ($_REQUEST["login"])) { // Lese aus Textfeld Benutzername und Passwort ein $benutzer = $_POST["user"]; $password = $_REQUEST["passwort"]; $sql = "SELECT id,user,passwort FROM benutzer WHERE user= '$benutzer' "; $ergebnis = mysql_query($sql); $zeile = mysql_fetch_assoc($ergebnis); $id = $zeile["id"]; $user = $zeile["user"]; $pw = $zeile["passwort"]; if ( $benutzer == $user && $password == $pw) { session_start(); $sess_id = session_id (); $sql = "UPDATE benutzer SET sessionnummer='$sess_id' WHERE user ='$benutzer'"; mysql_query($sql); echo ("<b>Hallo $benutzer</b></br>"); echo "<script>alert('Erfolgreich eingeloggt!')</script>"; } else { echo "<script>alert('Fehler!')</script>"; } } if (isset ($_REQUEST["logout"])) { session_unset(); $sql = "UPDATE benutzer SET sessionnummer='' WHERE user ='$benutzer'"; mysql_query($sql); } ----------------------------------------------------------------------------------- danke für eure hilfe Zitieren
andi_ Geschrieben 30. September 2011 Geschrieben 30. September 2011 1: Mit welcher Methode schickst du die Parameter an das Script? Get oder Post? Denn dann musst du auch entsprechend in der IF-Bedingung nach GET oder POST fragen! 2: Wenn du meinst, dass die Session-ID in der Datenbank zum User nur per Update wieder 'genullt' werden soll, solltest du dich an der Datenbank-ID des Users orientieren und nicht nur am Usernamen! Zwar gibt es in der Regel in Login-Systemen jeden Usernamen nur einmal. Aber nur die ID des Datensatzes ist wirklich eindeutig. Heißt also: $sql = "UPDATE benutzer SET sessionnummer='' WHERE user='".$benutzer."' AND id=".$id.";"; 'Solltest natürlich auch ein ID-Attribut in der benutzer-tabelle angelegt haben! Gruß Andi Zitieren
Jejerod Geschrieben 1. Oktober 2011 Geschrieben 1. Oktober 2011 Ich Post euch mal meinen code, des Problem ist das ich auf die Variable auf den ersten IF nicht zugreifen kann. ---------------------------------------------------------------------------------------- if (isset ($_REQUEST["login"])) { // Lese aus Textfeld Benutzername und Passwort ein $benutzer = $_POST["user"]; $password = $_REQUEST["passwort"]; $sql = "SELECT id,user,passwort FROM benutzer WHERE user= '$benutzer' "; Ab dieser Stelle disqualifiziert sich dein Code bereits. Schlagworte: https://secure.wikimedia.org/wikipedia/de/wiki/Sanity_Check https://secure.wikimedia.org/wikipedia/de/wiki/SQL-Injection Melde dich doch mal mit dem Benutzer '; DROP TABLE benutzer;-- an Auch beliebt ist ' OR id=1;-- Tipp: Wechseln auf mysqli, bind_param verwenden. Wenn schon, dann gleich richtig. Irgendwas wie $benutzer = $_REQUEST['user']; $password = $_REQUEST['password'] $sql = "SELECT id FROM benutzer WHERE user=? AND password=MD5(?)"; // you don't store passwords as plain text, do you? No, you don't. if (! $stmt = mysqli_prepare($sql)) { # some error } mysqli_stmt_bind_param($stmt, "ss", $benutzer, $password); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $id); if ( ! mysqli_stmt_fetch($stmt) ) { # no such user, login failed } else { # yep, user found with id=$id. hooray. [/PHP] ist gleich um Welten sicherer. Bezüglich des eigentlichen Problems: PHP: session_set_save_handler - Manual Zitieren
Benney Geschrieben 1. Oktober 2011 Autor Geschrieben 1. Oktober 2011 Ich schick mein Formular mit POST weg code <form method="POST"> Benutzername:<br/><input type="text" name="user"/><br/> Passwort:<br/><input type="password" name="passwort"/><br/> <input type="submit" name="login" value="Login"/> <input type="submit" name="logout" value="Logout"/> </form> Zitieren
Benney Geschrieben 1. Oktober 2011 Autor Geschrieben 1. Oktober 2011 Das Problem was ich hab ist, das ich wenn ich mich mal eingeloggt hab des funktoniert ja auch und die session id wird auch in der DB gespeichert, aber die ganzen variablen sind nach dem login wieder leer, also wie soll ich wenn ich den logout button drück wissen von wen ich die session id wieder löschen soll. ich weiß ja ned welcher user angemeldet ist.. wär super wenn ihr mir des sagen könnt. DANKEEEE :-) Zitieren
Jejerod Geschrieben 1. Oktober 2011 Geschrieben 1. Oktober 2011 Um erfolgreich die SessionID löschen zu können musst du dir den Benutzer in der Session auch gemerkt haben. Variablen wie "$benutzer" sind nicht persistent. Das Superglobal $_SESSION ist dafür zuständig if ( $benutzer == $user && $password == $pw) { session_start(); $sess_id = session_id (); // Benutzer Merken $_SESSION['user_id'] = $id; mysql_query(sprintf("UPDATE benutzer SET sessionnummer='%s' WHERE id=%d", mysql_escape_string($benutzer),$id)); echo ("<b>Hallo $benutzer</b></br>"); echo "<script>alert('Erfolgreich eingeloggt!')</script>"; } else { echo "<script>alert('Fehler!')</script>"; } if (isset ($_REQUEST["logout"])) { $uid = $_SESSION['user_id']; mysql_query(sprintf("UPDATE benutzer SET sessionnummer='' WHERE id=%d",$uid)); // jetzt koennen wir $_SESSION leeren session_unset(); } [/php] Zitieren
Benney Geschrieben 2. Oktober 2011 Autor Geschrieben 2. Oktober 2011 danke für die antwort aber irgendwie hab ich einen fehler und ich komm nicht drauf sieht es jemand von euch?? liegt vielleicht irgendwo bei den klammern if (isset ($_REQUEST["login"])) { $benutzer = $_POST["user"]; $password = $_REQUEST["passwort"]; $sql = "SELECT id,user,passwort FROM benutzer WHERE user= '$benutzer' "; $ergebnis = mysql_query($sql); $zeile = mysql_fetch_assoc($ergebnis); $id = $zeile["id"]; $user = $zeile["user"]; $pw = $zeile["passwort"]; if ( $benutzer == $user && $password == $pw) { session_start(); $sess_id = session_id (); $_SESSION['id'] = $id; $sql = "UPDATE benutzer SET sessionnummer='$sess_id' WHERE user ='$benutzer'"; mysql_query($sql); echo ("<b>Hallo $benutzer</b></br>"); echo "<script>alert('Erfolgreich eingeloggt!')</script>"; } else { echo "<script>alert('Fehler!')</script>"; } } if (isset ($_REQUEST["logout"])) { $uid = $_SESSION['id']; $sql = $sql = "UPDATE benutzer SET sessionnummer='' WHERE id='$uid'"; mysql_query($sql); session_unset(); } ?> <form method="POST"> Benutzername:<br/><input type="text" name="user"/><br/> Passwort:<br/><input type="password" name="passwort"/><br/> <input type="submit" name="login" value="Login"/> <input type="submit" name="logout" value="Logout"/> </form> Zitieren
Benney Geschrieben 2. Oktober 2011 Autor Geschrieben 2. Oktober 2011 (bearbeitet) er bringt immer die Fehlermeldung das er die $_Session undefined meine datenbank ist so aufgebaut einmal id (autoincrement) user , passwort vielleicht hilf das um den fehler zu erkenn Bearbeitet 2. Oktober 2011 von Benney Zitieren
Jejerod Geschrieben 2. Oktober 2011 Geschrieben 2. Oktober 2011 Das Problem dürfte das session_start() sein, das immer ausgeführt werden muss - bereits angemeldete Benutzer werden sonst nicht mehr erkannt. Diese Variante (ohne SQL) läuft auf meinem Testhost (PHP 5.3.3, lighttpd) einwandfrei: <?php // Sitzung starten damit $_SESSION gefuellt wird, wenn der Benutzer bekannt ist @session_start(); // wurde einloggen gewaehlt? if (isset ($_REQUEST["login"])) { $benutzer = $_REQUEST["user"]; $password = $_REQUEST["passwort"]; // kein SQL hier in der Testversion /* $sql = "SELECT id,user,passwort FROM benutzer WHERE user= '$benutzer' "; * $ergebnis = mysql_query($sql); * $zeile = mysql_fetch_assoc($ergebnis); */ $id = 1; $user = "demouser"; $pw = "demopasswort"; if ( $benutzer == $user && $password == $pw) { $_SESSION['id'] = $id; $_SESSION['username'] = $user; // kein SQL... /* $sql = "UPDATE benutzer SET sessionnummer='$sess_id' WHERE user ='$benutzer'"; * mysql_query($sql); */ } else { echo "<script>alert('Fehler!')</script>"; } } // oder wurde ausloggen gewaehlt? elseif (isset ($_REQUEST["logout"])) { $sql = $sql = "UPDATE benutzer SET sessionnummer='' WHERE id={$_SESSION['id']}"; printf("Würde Query %s ausführen<br/>",$sql); session_unset(); } // Ist der Benutzer bereits Angemeldet? if (isset($_SESSION['id'])) { printf("Hallo, %s. Deine Sitzungs-ID ist %s.<br/>",$_SESSION['username'],session_id()); // Button zum Ausloggen anzeigen echo <<<EOHTML <form action="" method="POST"> <input type="submit" name="logout" value="Logout"> </form> EOHTML; } // Ansonsten login form zeigen else { ?> <form method="POST"> Benutzername:<br/><input type="text" name="user"/><br/> Passwort:<br/><input type="password" name="passwort"/><br/> <input type="submit" name="login" value="Login"/> </form> <?php } ?> [/PHP] Das ganze ist an deinen Code angelehnt. [b][u]Denk trotzdem daran deine Benutzereingaben noch zu überprüfen und vor Einbau in ein SQL-Query zu escapen. Alles was von Benutzern eingegeben wird ist grundsätzlich böse und will deine Datenbank kaputt machen.[/u][/b] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.