2016-08-03 11 views
0

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:

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

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

  3. 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); 
?> 

Antwort

0
GENANNT weiter verwenden

Ihr Problem ist höchstwahrscheinlich durch die POST Daten verursacht wird immer noch in Ihrem Browser gespeichert. Durch Klicken auf die Zurück-Schaltfläche wird Ihr Benutzer erneut authentifiziert und eine Sitzung wird erstellt. Um dieses Problem zu beheben, können Sie die Methode POST-Redirect-GET verwenden.

<?php 

// Has the session been set? 
if (!isset($_SESSION)) { 
    session_start(); 
} 

// If a form is submitted, add the POSt data to a session 
// and redirect 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $_SESSION['login_data'] = $_POST; 
    unset($_POST); 
    header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
} 

// Check if user wants to login, authenticate and unset login data 
if (isset($_SESSION['login_data'])) { 
    // Authenticate 
    unset($_SESSION['login_data']); 
} 
?> 

<form action="" method="POST" role="form" action="<?= $_SERVER['PHP_SELF']; ?>"> 

    <label for="username">Username</label> 
    <input type="text" class="form-control" id="username" placeholder="Username" 

    <label for="password">Password</label> 
    <input type="password" class="form-control" id="password" placeholder="Password"> 

    <button type="submit" class="btn btn-primary">Authenticate</button> 
</form> 
+0

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

Verwandte Themen