我如何正确清除我的php会话数据


How can I clear my php session data correctly?

我的php网站是这样的:

  • Page1.php有一个html表单,它发送到Page2.php
  • Page2.php将所有POST数据存储到SESSION变量中,并有一个指向Page3.php的按钮
  • Page3.php有另一个表单,它将数据发送到Page4.php
  • Page4.php然后将所有POST数据存储到SESSION变量

我的问题是,它可能是必要的用户点击返回按钮Page4.php回到Page3.php和改变一些输入。我相信你都知道,当他们回到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时重新启动该过程,那么上次运行的数据将被加载到表单中。

我认为我需要做的是在用户访问Page1.php时清除所有会话变量。我试着这样做:

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

(以上是在我的文件的最顶部,第一个字符之前没有空格。)

当Page1.php加载但会话变量没有被取消设置时,没有警告生成。当我到达Page3.php时,上次运行的数据仍然被输入到表单中。

如何正确清除会话数据?

BTW 我只需要这个工作在Chrome,这是我测试的地方。

仅对不使用$_SESSION的旧弃用代码使用session_unset()。

参见session_destroy manual

的例子,你可以试着看看它是如何工作的

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, 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
(
)