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

Мой веб-сайт php протекает следующим образом:

  • Page1.php имеет html-форму, которая POSTs на Page2.php
  • Page2.php сохраняет все данные POST в переменные SESSION и имеет кнопку, ведущую к Page3.php
  • Page3.php имеет другую форму, которая отправляет свои данные в файл Page4.php
  • Page4.php затем сохраняет все свои данные POST в переменные SESSION

Моя проблема заключается в том, что пользователю может потребоваться щелкнуть кнопку «Назад» на странице 4.php, чтобы вернуться на страницу 3.php и изменить какой-либо ввод. AS im sure your all know when they come back to Page3.php форма будет пустой, так как вся страница будет повторно отображена в состоянии по умолчанию.

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

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

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

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

То, что я считаю нужным, – это очистить все переменные sdession, когда пользователь видит Page1.php. Я пытался это сделать так:

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

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

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

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

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

Solutions Collecting From Web of "Как я могу правильно очистить данные сеанса php?"

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

см. руководство session_destroy

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

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(); ?> 

destroyed.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, ie 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 ( )