Doppel-Login/Logout #PHP #SESSION?
Hallo,
ich habe folgendes Problem...
Auf einer Online-Plattform habe ich ein PHP/MySQL-Login... dieser funktioniert auch gut, jedoch muss ich mich 2x hintereinander Einloggen um die Plattform betreten zu können (bzw. 2x hintereinander Ausloggen um die SESSION korrekt zu beenden).
Login:
- Einloggen -> Führt zur Capture-Seite "Der Inhalt ist nur für eingeloggte User"! (SESSION leer)
- Einloggen -> Man ist korrekt eingeloggt (SESSION gesetzt)
Logout:
- Ausloggen -> SESSION ist korrekt gelöscht
- Refresh der Page, oder Tab schließen und nochmal öffnen -> SESSION ist wieder da
...ich komme nicht auf die Lösung...
Kann man eine Session "doppelt" starten? - nach meiner Recherche nicht... (Wo ist mein Denkfehler...?)@logout.php - Diese sieht so aus:
unset($_SESSION['userID']);
$_SESSION = array();
session_unset();
if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); }
session_destroy();
2 Antworten
Ich sehe nicht, wo du dich zweimal einloggst.
- Setzen der Session
- Login
Der User ist meistens erst dann eingeloggt, wenn die UserID in der Session steht.
Oder hast du sowas wie einen Nutzerbereich und einen Adminbereich? In dem Fall brauchst du für denselben Benutzer mit denselben Logindaten keine neue Session, sondern musst nur die Berechtigungen prüfen.
Wenn du eine Art Adminsession mit anderen Bedingungen starten willst, musst du die aktuelle zwischenspeichern, die neue starten, danach dann die neue beenden und die alte wiederherstellen.
Lasse mal die Neudefinition von $_SESSION sowie das unnötige Setzen des Cookies weg.
Das:
session_destroy();
sollte für dein Logout-Skript ausreichen.
Wieso du mehrmals den Login-Vorgang durchführen musst, um dich einzuloggen, kann ich dir nicht sagen, denn ich kenne deine konkrete Umsetzung dafür nicht.
Setze mal den Aufruf von start_session In deiner dashboard.php an den Anfang.
<?php
start_session();
if (!isset($_SESSION['userName'])) {
header("Location:login.php");
exit;
}
?>
Und nebenbei: Vergiss die Doctype-Angabe bei deinen Dokumenten nicht.
sooo.... neuer Tag, neuer Elan...!
- Korrektur: session_start(); -> in allen PHP-Dateien jetzt an erster Stelle nach <?php
- Desktop-Test: Chrome 76.0.x -> Fehler: Doppel-Login nötig, Doppel-Logout nötig
- Desktop-Test: IE 11.437.x -> funktioniert ohne Probleme (auf Win10)
- Desktop-Test: Safari: 12.1.x -> Fehler: Doppel-Login nötig, Doppel-Logout nötig
- Mobile-Test: Chrome Mobile -> Fehler: Doppel-Login nötig, Doppel-Logout nötig
- Mobile-Test: Samsung-Browser -> Fehler: Doppel-Login nötig, Doppel-Logout nötig
- Logout ist jetzt reduziert auf session_destroy(); -> funktioniert
Irgendwo ist noch der Wurm drinnen...
Fragen:
- was passiert, wenn auf Seite1 session_start(); ist, auf Seite2 nicht, und auf Seite3 wieder session_start(); ? macht er mir dann für die eine Sitzung auf Seite3 eine zweite Session auf? oder nimmt der die erste wieder auf?
- Ich lasse mir mit echo session_id(); die ID der Session anzeigen... die ID wird nach dem ersten Loggin-Versuch verworfen und er nimmt eine neue für den 2. Loggin-Versuch. Wenn man sich dann ein 2tes mal einloggt ist man auch wirklich eingeloggt, aber wieder mit der ersten Session-ID. Wie kann dass sein? Er springt immer zwischen zwei IDs rum.
Zur Prüfung, ob jemand eingeloggt ist, wird geschaut ob $_SESSION['userName'] gesetzt ist.
Grundschema...
login.php
logout.php
dashboard.php
index.php