Doppel-Login/Logout #PHP #SESSION?

2 Antworten

Ich sehe nicht, wo du dich zweimal einloggst.

  1. Setzen der Session
  2. 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.

Woher ich das weiß:Berufserfahrung

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.

XentriX5526 
Fragesteller
 19.09.2019, 14:10

Grundschema...

login.php

<?php
session_start();

if($_POST['verify']) {
  require('dbconn.php');

// Übernehmen der POST-Daten
// Abgleichen der POST-Daten auf Übereinstimmen mit Datenbankwenn ok dann...

if(wenn Username & Passwort ok, dann...) {

$_SESSION['userName'] = $_POST['userName']
header("Location:dashboard.php");
exit();

} else {

echo "Username oder Passwort falsch!";

}
}
?>

// Ab hier dann das HTML-Login-Formular
<form>...</form>

logout.php

<?php
session_start();
session_destroy();
header("Location:index.php");
?>

dashboard.php

<?php
if(!isset($_SESSION['userName'])) {

start_session();
header("Location:login.php");
exit();

}
?>

index.php

<?php
session_start();
?>

<html>...</html>
0
regex9  19.09.2019, 19:01
@XentriX5526

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.

0
XentriX5526 
Fragesteller
 20.09.2019, 09:12
@regex9

sooo.... neuer Tag, neuer Elan...!

  1. Korrektur: session_start(); -> in allen PHP-Dateien jetzt an erster Stelle nach <?php
  2. Desktop-Test: Chrome 76.0.x -> Fehler: Doppel-Login nötig, Doppel-Logout nötig
  3. Desktop-Test: IE 11.437.x -> funktioniert ohne Probleme (auf Win10)
  4. Desktop-Test: Safari: 12.1.x -> Fehler: Doppel-Login nötig, Doppel-Logout nötig
  5. Mobile-Test: Chrome Mobile -> Fehler: Doppel-Login nötig, Doppel-Logout nötig
  6. Mobile-Test: Samsung-Browser -> Fehler: Doppel-Login nötig, Doppel-Logout nötig
  7. Logout ist jetzt reduziert auf session_destroy(); -> funktioniert

Irgendwo ist noch der Wurm drinnen...

Fragen:

  1. 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?
  2. 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.

0