Zum Inhalt springen

Problem mit Session ID PHP


Benney

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :P

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...