Hallo zusammen,
ich bastle gerade an einem Session-Timeout für einen Administrationsbereich, in dem über Ajax eine Datenbank abgefragt wird, z.B. Spaltensortierung.
Ich habe nun primär eine Verständnisfrage zu Sessions in PHP in Verbindung mit Ajax.
Auf meiner Hauptseite (admin.php) habe am Anfang folgenden Code:
Dann folgt der Code, um die Tabelle zu initalisieren.
Der Ajax-Request ruft die Seite getTable.php auf, die die aktualisierte Tabelle (z.B. sortiert) liefert. Diese wird in den Tabellenbereich eingespeist.
getTable.php beginnt mit folgendem Code:
Ich habe soweit schon mal verstanden, dass ich über Ajax keinen richtigen Redirect über einen Header machen kann, aber darum geht es gerade nicht. Was mich beschäftigt ist Folgendes:
Wenn ich einen Ajax-Request auslöse und die Session abgelaufen ist, erscheint im Tabellen-Bereich korrekterweise die login.php mit dem Text "Ihre Sitzung ist abgelaufen..." Wenn ich dann jedoch einen Refresh der ganzen Seite ausführe, bin ich auf der admin.php wieder ganz normal eingeloggt und kann weiter arbeiten!
Frage: Warum haben "session_unset()" und "session_destroy" keine Auswirkung auf die Hauptseite??
Vielen Dank im Voraus, jede Hilfe dient mir zum Verständnis. Bin natürlich auch für weitere Tipps offen, Ziel wäre es eigentlich, bei einem Ajax-Request mit abgelaufener Zeit einen echten Redirect auf die login.php hinzubekommen...
Viele Grüße
Lars
ich bastle gerade an einem Session-Timeout für einen Administrationsbereich, in dem über Ajax eine Datenbank abgefragt wird, z.B. Spaltensortierung.
Ich habe nun primär eine Verständnisfrage zu Sessions in PHP in Verbindung mit Ajax.
Auf meiner Hauptseite (admin.php) habe am Anfang folgenden Code:
PHP-Code:
<?php
session_start();
$logout_time = 10; //zu Testzwecken auf 10 Sek.
if(empty($_POST['user']) || empty($_POST['pw'])){
$_SESSION["errorMessage"] = "Login nicht erfolgreich.";
header("Location: login.php");
exit();
} else {
$user = $_POST['user'];
$pw = $_POST['pw'];
$pw_hash = password_hash('Passwort', PASSWORD_DEFAULT);
if ($user == "admin" && password_verify($pw, $pw_hash)) { //Nutzername, Passwort und Session-ID werden später noch geändert
$_SESSION['login'] = 1;
}
}
if($_SESSION['login'] != 1){
$_SESSION["errorMessage"] = "Login nicht erfolgreich.";
header("Location: login.php");
exit();
}
$now = time();
if(isset($_SESSION["logout_time"]) && $now > $_SESSION["logout_time"]){
session_unset();
session_destroy();
session_start();
$_SESSION["errorMessage"] = "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.";
header("Location: login.php");
exit();
}
$_SESSION["logout_time"] = $now + $logout_time;
?>
Der Ajax-Request ruft die Seite getTable.php auf, die die aktualisierte Tabelle (z.B. sortiert) liefert. Diese wird in den Tabellenbereich eingespeist.
getTable.php beginnt mit folgendem Code:
PHP-Code:
session_start();
$logout_time = 10; //zu Testzwecken auf 10 Sek.
$now = time();
if($_SESSION['login'] != 1){
$_SESSION["errorMessage"] = "Login nicht erfolgreich.";
header("Location: login.php");
exit();
}
if(isset($_SESSION["logout_time"]) && $now > $_SESSION["logout_time"]){
session_unset();
session_destroy();
session_start();
$_SESSION["errorMessage"] = "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.";
header("Location: login.php");
exit();
}
$_SESSION["logout_time"] = $now + $logout_time;
Wenn ich einen Ajax-Request auslöse und die Session abgelaufen ist, erscheint im Tabellen-Bereich korrekterweise die login.php mit dem Text "Ihre Sitzung ist abgelaufen..." Wenn ich dann jedoch einen Refresh der ganzen Seite ausführe, bin ich auf der admin.php wieder ganz normal eingeloggt und kann weiter arbeiten!
Frage: Warum haben "session_unset()" und "session_destroy" keine Auswirkung auf die Hauptseite??
Vielen Dank im Voraus, jede Hilfe dient mir zum Verständnis. Bin natürlich auch für weitere Tipps offen, Ziel wäre es eigentlich, bei einem Ajax-Request mit abgelaufener Zeit einen echten Redirect auf die login.php hinzubekommen...
Viele Grüße
Lars
Kommentar