13

我的 php 网站流程如下:

  • Page1.php 有一个 POST 到 Page2.php 的 html 表单
  • 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 时清除所有 sdession 变量。我试图这样:

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

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

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

如何正确清除会话数据?

顺便说一句,我只需要它在 Chrome 中工作,这就是我测试的地方。

4

3 回答 3

15

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

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 ( )  
?>
于 2013-03-19T05:41:43.443 回答
3

从文档中:

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 销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量

于 2013-03-19T05:40:03.680 回答
1

使用 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
(
)
于 2015-07-12T14:44:15.627 回答