如何正确清除php会话数据?

如何正确清除php会话数据?,php,session,Php,Session,我的php网站流程如下: Page1.php有一个发布到Page2.php的html表单 php将所有POST数据存储到会话变量中,并有一个指向Page3.php的按钮 Page3.php有另一个表单,它将数据发布到Page4.php php然后将其所有POST数据存储到会话变量中 我的问题是,用户可能需要单击Page4.php上的后退按钮返回Page3.php并更改一些输入。我相信大家都知道,当他们回到Page3.php时,表单将是空白的,因为整个页面将以默认状态重新呈现 要绕过此问题并重

我的php网站流程如下:

  • Page1.php有一个发布到Page2.php的html表单
  • php将所有POST数据存储到会话变量中,并有一个指向Page3.php的按钮
  • Page3.php有另一个表单,它将数据发布到Page4.php
  • php然后将其所有POST数据存储到会话变量中
我的问题是,用户可能需要单击Page4.php上的后退按钮返回Page3.php并更改一些输入。我相信大家都知道,当他们回到Page3.php时,表单将是空白的,因为整个页面将以默认状态重新呈现

要绕过此问题并重新显示用户以前的输入,请执行以下操作:

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

文档中的

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_unset()用于不使用$\u session的旧的不推荐使用的代码

例如,您可以尝试看看它是如何工作的

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


现在我们来看一下PHP

php.php

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

使用session\u unset()。像这样:

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

Array
(
)

是的,我看到了,但是我有大约100个变量,而且每个变量都不能单独设置。我正在寻找一种方法来一次性清除它们。您可以轻松地迭代$\u会话,而不必知道其中的每个元素。公平地说,它毕竟是一个数组。我只知道有一种标准的方法可以一次完成所有的任务,但却无法付诸实施。谢谢你的帮助!也看到了这个链接,我尝试了
$\u SESSION=array()但是也没有使用变量,所以我回到上面的方法。似乎我遗漏了一些东西,我编辑了我以前的评论,为你添加了一段代码。因此,您可以看到它是如何工作的,请记住,每次使用$\u SESSION时,您都需要调用SESSION\u start();在该文件中。这看起来应该可以工作,但它不是,这是每次我转到Page1.php 1数组([session1]=>3[session2]=>2)woops时打印出来的内容。。。没有什么是正确的。。。如果您复制并粘贴了该代码,那么每次都会这样做,您可以运行它。。这只是一个示例,让您了解会话是如何工作的。首先,我创建会话1和会话2,用(int)3重命名或更新会话1,用空数组更新所有。。。。我会在第二页上更新评论,现在可以了。我确实尝试了
$\u SESSION=array()在过帐前类似。事实证明,出于一个奇怪的原因,我最初使用它的测试不起作用。当我访问Page4.php时,我正在使用Chrome中的“收藏夹”链接返回Page1.php。出于某种原因,如果我这样做,会话变量实际上并没有取消设置,或者至少表单仍然可以以某种方式看到它们。我在第4页上放了一个链接,指向第1页。如果我真的点击了那个链接,一切都会正常工作。奇怪…但至少我让它工作了。非常感谢你的帮助。
<?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
(
)