2010-07-27 8 views
0

J'utilise un script de connexion de PHP qui remet en question l'utilisateur pour nom d'utilisateur & mot de passe.utilisateur peut se reconnecter dans IE après la déconnexion en appuyant sur le bouton retour

programme stocke Une fois authentifié une valeur de session. Lors de la déconnexion, la valeur de la session est définie sur .

Voici le problème:

Dans IE 8 (pas Firefox), l'utilisateur peut frapper le bouton retour plusieurs fois jusqu'à ce que l'écran affiche le message qui "page Web a expiré". C'est probablement l'écran de connexion.

S'il appuie sur la touche F5, il semble que le nom d'utilisateur et mot de passe sont toujours suspendus autour dans les variables POST et il obtient relogué.

Répondre

0

On dirait que vous ne supprimez pas réellement la session sur le serveur, plutôt que vous effacez l'identificateur de session dans l'URL (ou quelque chose) sur le client. Ainsi, lorsque le bouton Précédent est enfoncé, il essaie de renvoyer le fichier sessionid qui est transmis et votre serveur l'accepte.

OU

Les pages sont juste d'être mises en cache par le client et lorsqu'ils appuient sur le dos, il charge à partir du cache. Quand ils forcent l'actualisation, il recharge la page sans les variables.

+0

Aucun ID de session dans l'URL. Je pense que la page de connexion est mise en cache avec des valeurs. Lorsqu'ils appuient sur F5, ils soumettent de nouveau leur nom d'utilisateur et mot de passe. J'ai cet ensemble dans l'en-tête: en-tête ("Cache-Control: no-cache, doit-revalider"); header ("Expire le: sam. 26 juil. 1997 05:00:00 GMT"); header ("Pragma: public"); session_start(); –

+0

C'est possible, mais en général, je pense que le navigateur dira "Attention: vous resoumettez des variables de formulaire" ou quelque chose comme ça. –

0

Vous allez avoir besoin de faire une vérification par session pour résoudre ce problème. Vous passez à votre formulaire de connexion un champ caché avec une chaîne de vérification aléatoire. Stockez la chaîne aléatoire dans la session et utilisez le champ caché reposted pour vérifier contre cet identifiant. Après confirmation de la connexion, régénérez le vérificateur afin que la prochaine fois que le formulaire est posté, le vérificateur soit incorrect et que le post du bouton arrière ne fonctionne pas.

0

après que vous postez votre formulaire de connexion et vérifiez/connexion/tout, faire une redirection header('location:someOtherPage.php) à une autre page. Ensuite, le formulaire ne pourra plus être affiché en appuyant sur f5. Par exemple:

//login.php 
<?php 
//no cache headers if you want. 
session_start(); 
if(isset($_POST) && !empty($_POST)){ 
    //validate user & pass. if valid set session then... 
    if(is_valid_user()){ 
     //set session 
     $_SESSION['loggedIn'] = true; 
     //close session. this prevents problems with vars not 
     //setting when using a header redirect because you redirect 
     //before the session file can write. 
     session_write_close(); 
     //redirect to another page 
     header('location:loggedIn.php'); 
     //stop the script from running 
     exit; 
    } else { 
     echo "<div class='error'>Login failed.</div>"; 
    } 
} 
//echo login form. 

?> 

une redirection d'en-tête ne se présente pas dans l'histoire si lorsque vous appuyez sur retour, ils ne verront pas la page qui vous permet de rediffuser la forme.

Questions connexes