Login und Logout
Session will nich beendet werden.
Hallo Leute,
ich habe hier ein Problem mit einem Logout-Skript, bei dem die Session einfach nicht beendet werden will. Wobei man beenden wohl nicht sagen kann, eher wird sie immer wieder direkt aufgerufen. Hier erstmal Code mit Erklärung:
Das ist der relevante Teil beim Login, vorher erfolgt natürlich noch Vergleich von Benutzerangaben usw. Der Login funktioniert eigentlich einwandfrei.
Hier der Check, ob der Benutzer eingeloggt ist, funktioniert auch:
Und nun der Logout, der irgende nicht so richtig will:
Nun passiert also folgendes: Der User kommt auf die Seite und loggt sich ein, prima. Cookie wird gesetzt, Session "angemeldet" ist auch da. Nun will ich mich ausloggen und die Seite mit eben nur dieser Funktion logout wird aufgerufen. Das Cookie ist weg, die Session aber nicht. Wenn ich nun per URL-Manipulation auf einen geschützten Bereich zugreife, der per logged_in abgefragt wird, komme ich dort rein. Per "echo" sehe ich auch, dass sowohl das Cookie, als auch die Session wieder da sind. Testweise habe ich Cookies mal komplett deaktiviert, weil ich dachte, dass vielleicht irgendwas immer geladen wird (obwohl ja gelöscht). Dem ist aber nicht so, denn auch ohne Cookies komme ich immer wieder in meine geschützten Bereiche. Browser schließen, also Sessionablauf, bringt nichts. Die ist einfach immer da.
Was ich beim Logout schon probiert habe:
session_name('angemeldet');
session_unset;
session_destroy;
$_SESSION = array();
session_destroy();
---
session_unset($_SESSION['angemeldet]);
session_destroy();
Es hat alles Nichts geholfen, weiß jemand Rat?
Mfg
Mitchell
Hallo Leute,
ich habe hier ein Problem mit einem Logout-Skript, bei dem die Session einfach nicht beendet werden will. Wobei man beenden wohl nicht sagen kann, eher wird sie immer wieder direkt aufgerufen. Hier erstmal Code mit Erklärung:
Das ist der relevante Teil beim Login, vorher erfolgt natürlich noch Vergleich von Benutzerangaben usw. Der Login funktioniert eigentlich einwandfrei.
{
$_SESSION['angemeldet'] = 1;
setcookie ("PHPSESSID",$row['user'],time()+7 * 86400,"/");
header ('Location: ../mein_index.php');
}
Hier der Check, ob der Benutzer eingeloggt ist, funktioniert auch:
function logged_in() {
if ($_SESSION['angemeldet'] == 1) {
return(true);
} else {
return(false);
}
}
Und nun der Logout, der irgende nicht so richtig will:
function logout() {
setcookie("PHPSESSID", '', time()-42000, '/');
session_unset($_SESSION['angemeldet']);
return session_destroy(); // gibt bei Erfolg true zurŸck
}
Nun passiert also folgendes: Der User kommt auf die Seite und loggt sich ein, prima. Cookie wird gesetzt, Session "angemeldet" ist auch da. Nun will ich mich ausloggen und die Seite mit eben nur dieser Funktion logout wird aufgerufen. Das Cookie ist weg, die Session aber nicht. Wenn ich nun per URL-Manipulation auf einen geschützten Bereich zugreife, der per logged_in abgefragt wird, komme ich dort rein. Per "echo" sehe ich auch, dass sowohl das Cookie, als auch die Session wieder da sind. Testweise habe ich Cookies mal komplett deaktiviert, weil ich dachte, dass vielleicht irgendwas immer geladen wird (obwohl ja gelöscht). Dem ist aber nicht so, denn auch ohne Cookies komme ich immer wieder in meine geschützten Bereiche. Browser schließen, also Sessionablauf, bringt nichts. Die ist einfach immer da.
Was ich beim Logout schon probiert habe:
session_name('angemeldet');
session_unset;
session_destroy;
$_SESSION = array();
session_destroy();
---
session_unset($_SESSION['angemeldet]);
session_destroy();
Es hat alles Nichts geholfen, weiß jemand Rat?
Mfg
Mitchell
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119406
Url: https://administrator.de/forum/login-und-logout-119406.html
Ausgedruckt am: 06.05.2025 um 03:05 Uhr
12 Kommentare
Neuester Kommentar
Hi Mitchell,
ich habe die Logoutfunktion gar nicht so geschrieben. Bei mir ist es einfach eine Art Modul:
So sollte es auch bei dir gehen...kommt auch vllt. ein bisschen auf die PHP Version an.
Grüße,
Dani
ich habe die Logoutfunktion gar nicht so geschrieben. Bei mir ist es einfach eine Art Modul:
<?php
@session_start();
include_once ("inc/header.php");
session_destroy();
session_unset($_SESSION);
$_SESSION=array();
echo "<meta http-equiv='refresh' content='2; URL=index.php'>";
?>
Grüße,
Dani
Moin moin
Was machst du eigendlich mit dem Cookie ?
Wirst du vielleicht über den immer wieder eingeloggt ?
Warum überschreibst du die PHP-Session-Id in dem Cookie mit einem Benutzernemen ?
Wie kommts, das trotz überschriebener (falscher) Session-Id die Session auf dem Server wiederhergestellt wrden kann ?
Funktioniert dein Login vieleich überhaubt nicht ?
~Arano
Der Login funktioniert eigentlich einwandfrei.
Hm... scheint mir besser zu funktionieren als er sollte !Was machst du eigendlich mit dem Cookie ?
Wirst du vielleicht über den immer wieder eingeloggt ?
Warum überschreibst du die PHP-Session-Id in dem Cookie mit einem Benutzernemen ?
Wie kommts, das trotz überschriebener (falscher) Session-Id die Session auf dem Server wiederhergestellt wrden kann ?
Funktioniert dein Login vieleich überhaubt nicht ?
~Arano
Hm hm...
Du scheinst da grundsätzlich was durcheinander zu bringen ...glaube ich :D
Auf der einen Seite möchtest du eine benannte Session (mit dem Benutzernamen) "login()" und
auf der anderen Seite willst du immer NUR die Session "angemeldet" "logout()" beenden.
So würde die benannte Session (mit dem Benutzernamen) immer bestehen bleiben was einen erneuten login zu folge hätte trotz vermeindlichem logout.
Dazu kommt noch das du so die Session nicht umbenennst sondern lediglich ungültig machst den:
Für eine benannte Session müsstest du, sofern ich das Manual eben richtig überflogen habe, "session_name()" vor "sesssion_start()" aufrufen:
Das Gegenstück zum logout:
Bei dir lief es glaube ich so ab:
Sollte ich mich irren, tschuldigung
Und vielleciht doch mal etwas mehr vom Script preisgeben, z.B: den login vorgang von dem ausser dir och keiner weiss wie der aussieht - ob wohl diese eine potentielle Fehlerquelle sein kann ;)
So, gehe erst mal pennen, hatten nen Sprenkleranlagen__wasserrohrbruch__ in Lager...
~Arano
Du scheinst da grundsätzlich was durcheinander zu bringen ...glaube ich :D
Auf der einen Seite möchtest du eine benannte Session (mit dem Benutzernamen) "login()" und
auf der anderen Seite willst du immer NUR die Session "angemeldet" "logout()" beenden.
So würde die benannte Session (mit dem Benutzernamen) immer bestehen bleiben was einen erneuten login zu folge hätte trotz vermeindlichem logout.
Dazu kommt noch das du so die Session nicht umbenennst sondern lediglich ungültig machst den:
Für eine benannte Session müsstest du, sofern ich das Manual eben richtig überflogen habe, "session_name()" vor "sesssion_start()" aufrufen:
<?php
session_name('wasserrohrbruch');
session_start();
echo 'Diese Session heisst: "'.session_name().'"<br>';
// Ausabe: Diese Session heisst: "wasserrohrbruch"
?>
<?php
session_start(); // Der Sessionname (id) wird aus dem Cookie gezogen)
session_unset();
session_destroy();
?>
Bei dir lief es glaube ich so ab:
- Session wird gestartet und heisst:" 16df4g5s61d6g516df16sfhj6j"
- Session-Id im Cookie wird mit dem Benutzernamen überschrieben: "Arano"
- Session soll gelöscht werden: "angemeldet"
Sollte ich mich irren, tschuldigung
Und vielleciht doch mal etwas mehr vom Script preisgeben, z.B: den login vorgang von dem ausser dir och keiner weiss wie der aussieht - ob wohl diese eine potentielle Fehlerquelle sein kann ;)
So, gehe erst mal pennen, hatten nen Sprenkleranlagen__wasserrohrbruch__ in Lager...
~Arano

Moinsen
Das ist hier alles gerade sehr verwirrend, will dennoch mal versuchen, etwas bei zu steuern. Deshalb hier mal eine meiner Kreationen.
Ich denke, es liegt daran, wie die Session aufgebaut wird.
Immer beachten!!
session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf. Wenn eine benannte Session verwendet wird, muss session_name() aufgerufen werden, bevor session_start() aufgerufen wird.
Per Formular sende ich Login Informationen an folgendes Scripts. Dort baue ich dann die Session auf.
Das folgende Script prüft, ob ein Benutzer angemeldet ist.
Und hier mein Logout
Das ist hier alles gerade sehr verwirrend, will dennoch mal versuchen, etwas bei zu steuern. Deshalb hier mal eine meiner Kreationen.
Ich denke, es liegt daran, wie die Session aufgebaut wird.
Immer beachten!!
session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf. Wenn eine benannte Session verwendet wird, muss session_name() aufgerufen werden, bevor session_start() aufgerufen wird.
Per Formular sende ich Login Informationen an folgendes Scripts. Dort baue ich dann die Session auf.
<?php
session_start ();
include_once ('inc_conf/cl_db_mysql.inc.php');
include_once ('inc_conf/cl_db.inc.php');
include_once ('inc_conf/common.inc.php');
$db = new db;
$array_ergebnis = $db->execute("SELECT Id, Nickname, Nachname, Vorname, Akt FROM benutzerdaten WHERE Nickname = '".$_REQUEST["name"]."' AND Kennwort = '".md5 ($_REQUEST["pwd"])."'");
if($db->num_rows()>0)
{
foreach($array_ergebnis as $zeile)
{
$_SESSION["user_id"] = $zeile["Id"];
$_SESSION["user_nickname"] = $zeile["Nickname"];
$_SESSION["user_nachname"] = $zeile["Nachname"];
$_SESSION["user_vorname"] = $zeile["Vorname"];
$_SESSION["akt"] = $zeile["Akt"];
$_SESSION["admin"] = $zeile["Admin"];
if ($_POST["pagelogin"] == 'gaestebuch')
{
header ("Location: ?seite=gaestebuch");
}
if ($_POST["pagelogin"] == '[cd]picture_vw')
{
header ("Location: ?seite=[cd]picture_vw");
}
}
}
else
{
error('Nickname oder Kennwort nicht korrekt!');
}
unset($db);
?>
Das folgende Script prüft, ob ein Benutzer angemeldet ist.
<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
include 'inc_conf/formular.inc.php';
}
else
{
if ($_SESSION['akt'] == '0')
{
echo "<p>Ihr Account wird noch überprüft und ist noch nicht aktiviert. Bitte haben Sie Geduld.</p>";
session_start ();
session_unset ();
session_destroy ();
echo "<a href='?seite=start' target='_self'>Hier gehts weiter!</a>";
}
else
{
bla bla....
?>
Und hier mein Logout
<?php
session_start ();
session_unset ();
session_destroy ();
echo "<h2>Logout</h2><p>Sie haben Sich erfolgreich abgemeldet.</p>";
if ($_REQUEST["pagelogout"] == 'gaestebuch')
{
echo "<a href='?seite=gaestebuch' target='_self'>Hier gehts weiter!</a>";
}
if ($_REQUEST["pagelogout"] == '[cd]picture_vw')
{
echo "<a href='?seite=start' target='_self'>Hier gehts weiter!</a>";
}
?>

Versuch doch mal, auf session_name() zu verzichten und schau nach, ob du überall session_start () verwendet hast.