web-dev-qa-db-fra.com

Comment puis-je effacer mes données de session php correctement?

Mon site php coule comme ceci:

  • Page1.php a une forme HTML qui POST à ​​Page2.php
  • Page2.php stocke toutes les données POST dans des variables SESSION et comporte un bouton menant à Page3.php
  • Page3.php a une autre forme qui poste ses données à Page4.php
  • Page4.php stocke ensuite toutes ses données POST dans des variables SESSION

Mon problème est qu’il peut être nécessaire pour un utilisateur de cliquer sur le bouton Précédent de Page4.php pour revenir à Page3.php et modifier certaines entrées. Dès que vous serez tous conscients qu’ils reviendront à Page3.php, le formulaire sera vide car la page entière sera rendue dans son état par défaut.

Pour contourner cela et afficher à nouveau la précédente entrée de l'utilisateur, procédez comme suit:

<input value="<?php echo $_POST["guest1Ticket"];?> " type="text"  name="guest1Ticket" id="guest1Ticket" onblur="isTicketNumber(this)"  size ="22"/>

Ceci étant la partie importante - <?php echo $_POST["guest1Ticket"];?>

Cela fonctionne mais crée un autre problème pour moi. Si l'utilisateur retourne à Page1.php (avant de créer son navigateur) et relance le processus lorsqu'il arrive à Page3.php, les données de la dernière exécution seront chargées dans le formulaire.

Ce que je suppose que je dois faire, c'est effacer toutes les variables de la session lorsque l'utilisateur visite Page1.php. J'ai essayé de faire ça comme ça:

<?php 
 session_start(); 
 session_unset(); 
 session_destroy(); 
?> 

(Ce qui précède est tout en haut de mon fichier, sans espace avant le premier caractère.)

Aucun avertissement n'est généré lors du chargement de Page1.php, mais les variables de session ne sont pas en cours de suppression. Quand j'arrive à Page3.php, les données de la dernière exécution sont encore entrées dans le formulaire.

Comment puis-je effacer mes données de session correctement?

BTW Je n’ai besoin que de cela pour fonctionner sous Chrome et c’est là que se déroulent les tests.

8
DelightedD0D

Utilisez uniquement session_unset () pour les codes obsolètes obsolètes qui n'utilisent pas $ _SESSION. 

voir session_destroy manual

par exemple, vous pouvez essayer de voir comment cela fonctionne

session.php

<?php
session_start();
$_SESSION = array('session1'=>1,'session2'=>2);

echo $_SESSION['session1']; //1
$_SESSION['session1'] = 3;
echo "<pre>";
print_r($_SESSION); //session one now updated to 3
echo "</pre>";


$_SESSION = array();
if ($_SESSION['session1']) {
 echo $_SESSION['session1']; //  IS NOW EMPTY
} else {
 echo "woops... nothing found";
}
?>
<p>
<a href="destroyed.php">NOW GOING TO DESTROYED PHP<a/>
</p>

<?php
session_destroy();
?>

détruit.php

<?php
session_start(); // calling session start first on destroyed.php

print_r($_SESSION); // prints Array ( )  
?>
13
Grmn

De la documentation:

If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used,
use unset() to unregister a session variable, i.e. unset ($_SESSION['varname']);

Et prenez soin de session_destroy:

session_destroy détruit toutes les données associées à la session en cours. Il ne désactive aucune des variables globales associées à la session

2
MatRt

Utilisez session_unset (). Comme ça:

<?php session_start(); ?><!DOCTYPE html>
<html>
  <body>
    <?php
      $_SESSION["variabletounset"] = "I am going to be unset soon along with all of the other session variables.";
      print '<pre>' . "\n";
      print_r($_SESSION);
      print '    </pre>' . "\n";

      session_unset();

      print '    <pre>' . "\n";
      print_r($_SESSION);
      print '    </pre>' . "\n";
    ?>
  </body>
</html>

Cela donnerait:

Array
(
variabletounset => I am going to be unset soon along with all of the other session variables.
)

Array
(
)
0
Ewer Ling