Как правильно очистить данные сеанса php?

мой сайт php течет так:

  • Страница 1.php имеет html-форму, которая публикуется на странице 2.в PHP
  • Страница 2.php хранит все данные POST в переменных сеанса и имеет кнопку, ведущую к Page3.в PHP
  • Page3.php имеет другую форму, которая публикует свои данные на Page4.в PHP
  • Страница4.затем php сохраняет все свои данные POST в переменные сеанса

моя проблема в том, что для пользователя может быть нессикарно нажать кнопку "назад" на Page 4.php, чтобы вернуться к странице 3.php и изменить некоторые входные данные. Как я уверен, все ваши знают, когда они вернутся к Page3.php форма будет пустой, так как вся страница будет повторно отображена в состоянии по умолчанию.

чтобы обойти это и повторно отобразить предыдущий ввод пользователя im, делая это:

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

Это важная часть - <?php echo $_POST["guest1Ticket"];?>

это работает, но создает еще одну проблему для меня. Если пользователь возвращается к Page1.php (перед colsing своего браузера) и запускается процесс повторяется снова, когда они попадают на Page3.php данные с их последнего прогона будут загружены в форму.

что мне нужно сделать, это очистить все переменные sdession, когда пользователь посещает Page1.РНР. Я попытался что-то вроде этого:

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

(выше в верхней части моего файла без пробелов перед первым символом.)

предупреждения не генерируются при Page1.php загружает, но сеанс переменные не получают unset. Когда я доберусь до страницы 3.php данные с последнего запуска все еще вводятся в форму.

Как правильно очистить данные сеанса?

кстати мне нужно только это, чтобы работать в Chrome и вот где я тестирую.

3 ответов


используйте только session_unset () для старого устаревшего кода, который не использует $_SESSION.

посмотреть руководство session_destroy

пример вы можете попробовать и посмотреть, как он работает

сессии.в 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();
?>

уничтожены.в PHP

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

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

из документации:

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']);

и позаботьтесь о session_destroy:

session_destroy-разрушает все данные, связанные с текущим сеансом. Он не отменяет ни одну из глобальных переменных, связанных с сеансом


использовать session_unset(). Вот так:

<?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>

это будет выход:

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

Array
(
)