web-dev-qa-db-fra.com

Comment puis-je désactiver le bouton de navigation arrière après que l'utilisateur a appuyé sur sa session et détruit la session?

J'ai des problèmes avec session_destroy().
Lorsque l'utilisateur appuie sur Log out, il doit détruire la session. J'ai écrit le code suivant:

Logout.php

<?php
    session_start();
    session_destroy();
    header("location: LoginViewController.php");
?>

Après avoir appuyé sur log out, lorsque je clique sur le bouton Précédent du navigateur, il affiche ma page d'utilisateur Logined et mon nom d'utilisateur de session précédents dans la page Login.php.

Login.php

<?php
    session_start();
    $_SESSION['user']=  $_GET['username'];
    echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'</div>"';
    echo '<a href="Logout.php" style="text-align:right">Logout</a>';

LoginViewController.php

<?php
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

    $Username = $_POST['uname'];
    $Password = $_POST['pwd'];
    $User_Type=$_POST['type'];

    If (!(empty($Username) && empty($Password) && empty($User_Type))){
        $model = new UsersModel();
        $rowsCount = $model->checkUser($Username,$Password,$User_Type);

        if ($rowsCount!=0){
            header("location:login.php?username=".$_POST['uname']."");  
        } else {
            echo '<script type="text/javascript">alert("Enter username and password correctly");
            window.location.href="LoginViewController.php";</script>';
        }
    }

Je ne sais pas pourquoi ça marche comme ça.
S'il vous plaît aidez-moi à découvrir où je commets une erreur.

Je veux désactiver le bouton retour de ce navigateur après la déconnexion.

10
Kvk Ganesh

page login.php: 

<?php 
    if (isset($_POST['uname'], $_POST['pwd'], $_POST['type'])) {
        $Username = $_POST['uname'];
        $Password = $_POST['pwd'];
        $User_Type=$_POST['type'];
        if (!(empty($Username) || empty($Password) || empty($User_Type))) 
        {
             $model = new UsersModel();
             $rowsCount = $model->checkUser($Username,$Password,$User_Type);
             if ($rowsCount!=0)
             {
                  $_SESSION['user'] = $Username;
                  header("Location:LoginViewController.php");

             } else {
                  echo 'Bad user';
             }
        } else {
             echo 'Please, fill all inputs';
        }
    } else {
        echo 'Bad form sent';
    }
?>
<form name="f1" method="POST" action="" >
    // inputs
</form>

LoginViewController.php:

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

if (!isset($_SESSION['user'])) {
    header('Location: login.php');
    exit();
}
echo 'You have successfully logged as '.$_SESSION['user']
?>

Et ajoutez les en-têtes pour forcer le navigateur à revalider les pages:

logout.php: 

<?php 
session_start();
session_destroy();
$_SESSION = array();
header("location: login.php");
?>
8
Brewal

Cela est dû au cache du navigateur qui conserve les détails dans la page. Si vous actualisez la page ou si vous vous déplacez plus loin dans votre espace privé, vous serez invité à vous connecter à la page et vous ne pourrez rien voir, en supposant que votre connexion vérifier que le système est correctement configuré.

Sinon, vous pouvez forcer le navigateur à ne pas mettre la page en cache et à envoyer une nouvelle requête au serveur.

header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
3
Fabio

Vous devriez faire une redirection à partir de votre script de déconnexion.

Par exemple:

header("Location: index.php");

Si l'utilisateur clique la prochaine fois, il retournera à la page logout.php, où vous pourrez refaire le contrôle et rediriger à nouveau :) C'est une boucle infinie si l'utilisateur tente à nouveau.

2
wintercounter

Voici mon LoginController.php

  <?php

     header("Cache-Control: private, must-revalidate, max-age=0");
     header("Pragma: no-cache");
     header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

// Si vous soumettez le formulaire, insérez les détails dans la base de données

   $Username = $_POST['uname'];
    $Password = $_POST['pwd'];
    $User_Type=$_POST['type'];
    session_start();

   If (!(empty($Username) && empty($Password) && empty($User_Type))) 
   {

    $model = new UsersModel();

    $rowsCount = $model->checkUser($Username,$Password,$User_Type);

    if ($rowsCount!=0)
    {
        $_SESSION['user'] = $Username;
       header("location:login.php");

    } else 
        {
        echo '<script type="text/javascript">alert("Enter username and password correctly");
        window.location.href="LoginViewController.php";</script>';
           }
        }

    }
     ?>

Voici ma page après la connexion (login.php) .. et affiche le nom d'utilisateur de la session et le lien de déconnexion

    <?php

      header("Cache-Control: private, must-revalidate, max-age=0");
      header("Pragma: no-cache");
      header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");

      session_start();
     if(!isset($_SESSION['user']))
     {
       header('Location: LoginViewController.php');
        exit();
       }
      echo '"<div style="background:white; text-align:right"> Login as:'.$_SESSION['user'].'
       <a href="Logout.php" style="text-align:right">Logout</a></div>"';
        ?>

Voici ma Logout.php

   <?php
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
     session_start();
      session_destroy();
      header("Location: LoginViewController.php");
   ?>
1
Kvk Ganesh
header("Cache-Control: private, must-revalidate, max-age=0");
header("Pragma: no-cache");
header("Expires: Fri, 4 Jun 2010 12:00:00 GMT");
0
Linda George
if (window.history) {
window.history.forward(1);
}
0
Manjunath

Essayez ce code sur toutes les pages sauf la page de connexion et la page de validation de la connexion.

session_start();

if (!$_SESSION['sesuname']) {
    echo "You are not logged in.";
    exit();
} else {    
    /* All other codes must be here */
}
0
Arwin