Ich habe gerade ein Problem mit Sitzungen. Ich benutze ein Login-Skript, um die anfängliche Authentifizierung zu tun, und dann authentifiziere ich am Anfang jeder geschützten Seite, und schließlich versuche ich ausloggen (Code unten).Kann Session auch nach Neustart des Browsers nicht beenden
Die Dateien existieren auf meinem Server mit PHP 5.6. Ich verwende Win10 und Chrome auf meinem PC.
SYMPTOME:
Obwohl Sitzung Vars zerstört wird, kann ich immer noch die Schaltfläche ‚Zurück‘ in meinem Browser eine Seite zu sehen verwenden, die eine Authentifizierung. Wenn ich $ _SESSION vars auf dieser Seite ablege (die ich mit der Zurück-Schaltfläche des Browsers zurückgesucht habe), sind alle $ _SESSION var nicht vorhanden - aber die Seite wird noch geladen.
COOKIES sind immer noch da. Ich habe Cookie-Lebenszeit in meinem PHP-Ini auf 1 (eine Sekunde) zum Testen gesetzt ... sie sind immer noch da, nachdem ich sie angeblich gelöscht habe. Auch wenn sie auf 0 gesetzt sind, sind sie immer noch da, nachdem ich den Browser neu gestartet habe.
Nachdem ich oben Symptom 1 gelesen habe, denke ich, dass viele von Ihnen richtig erraten werden, dass die Sitzung noch am Leben ist - auch nachdem ich den Browser geschlossen habe, starte ihn neu und tippe die URL einer der geschützten Seiten direkt ein In der Adressleiste kann ich die Seite immer noch anzeigen, obwohl die Variable $ _SESSION, die nach Authentifizierung sucht, nicht existiert.
Würde mich wirklich beraten lassen.
LOGIN SCRIPT
//this page is called (using require_once) by the page
//that captures username and password
session_start();
//requirements
require_once "../php/path.php"; //sets the server search path
require_once "constants.php"; //does all the DEFINE stuff
require_once HTML_HEADER; //loads HTML code - doc type, head etc
require_once DATABASE; //does the dB connecting
//collect the POST
$uName = $_POST[uName];
$uPsswd = $_POST[uPsswd];
//build & execute sql query
**SQL to retreive uName and password here if match then...**
$_SESSION['approved'] = 'true';
require_once MAIN_CONTENTS; //main page after authentic log in
exit;
AUTHENTICATE CODE require_once VON JEDER geschützten Seite
if (session_status() == PHP_SESSION_NONE) {
session_start();
}//end if
//what's the time Mr Wolf?!!!
$now = time();
//although session exists, are we logged in and approved? If not kill session & eixt.
if (isset($_SESSION['approved']) && $_SESSION['approved'] != 'true'){
require_once "killSession.php";
require_once "notAuthorised.php";
exit;
}//end if
if (!isset($_SESSION['approved'])){
require_once "killSession.php";
require_once "notAuthorised.php";
exit;
}
//if session exists, how old is it? If older than 'discard_after' then kill session.
if (isset($_SESSION['discard_after']) && $now > $_SESSION['discard_after']) {
require_once "killSession.php";
require_once "notAuthorised.php";
exit;
}//end if
else {
//logged in and approved so set timeout for 15 mins
$_SESSION['discard_after'] = $now + 30;
}//end else
DIE killSession FILE
//check to make sure session exists - start if not
if (session_status() == PHP_SESSION_NONE) {
session_start();
$_SESSION['approved']='false';
}//end if
//following code caused 'headers already sent...'
//if (isset($_COOKIE[session_name()])) {
//$params = session_get_cookie_params();
//setcookie(session_name(),'',time() - 172800, '/', $params['domain'], $params['secure'], isset($params['httponly']));
//}
session_unset();
session_destroy();
session_write_close();
setcookie(session_name(),'',0,'/');
session_regenerate_id(true);
?>
Vielen Dank für Ihre schnelle Antwort und versuchen, dieses Problem zu lösen. Obwohl Ihr Code mein Problem nicht gelöst hat, war Ihr Kommentar zu BROWSER CACHE SPOT ON! So, jetzt habe ich und 'header()' verwendet, um das Seiten-Caching zu deaktivieren (obwohl immer noch ein seltsames Verhalten in Chrome ... ein separates Problem)! – noowie