2013-03-19 56 views
8

我的PHP的网站流量是这样的:如何正确清除我的php会话数据?

  • 有page1.php中的HTML表单POST到使page2.php这
  • 使page2.php存储所有的POST数据到SESSION变量,有一个按钮,导致第3页。 PHP
  • Page3.php具有另一种形式职位的数据Page4.php
  • Page4.php然后存储所有的POST数据到Session变量

我的问题是,它可以b需要用户点击Page4.php上的后退按钮返回到Page3.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(在浏览器之前),并在他们到达Page3.php时再次启动该过程,那么他们上次运行的数据将被加载到表单中。

我想我需要做的是在用户访问Page1.php时清除所有的变量变量。我试着向,像这样:

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

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

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

如何正确清除会话数据?

顺便说一句我只需要这个在Chrome和那里即时通讯测试工作。

回答

11

只对不使用$ _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 () 
?> 
+0

看到这个链接也试过'$ _SESSION = array();'但是没有使用变量,所以我回到上面的方法。似乎我在某处丢失了某些东西 – DelightedD0D 2013-03-19 05:44:30

+0

我编辑了我以前的评论,为您添加了代码片段。所以你可以看到它是如何工作的,记住每次使用$ _SESSION时你都需要调用session_start();在那个文件中。 – Grmn 2013-03-19 05:55:35

+0

这看起来像它应该工作,但它deosnt,这就是被每次去打印出到1个page1.php中阵列 ( [会话1] => 3 [会话2] => 2 ) woops .. 。没有发现任何东西 – DelightedD0D 2013-03-19 06:14:16

1

从文档:

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

+0

是的,我看到了,但我有大约100 variuables并会过早地不要清除各自独立。我正在寻找一种方法来一次清除它们 – DelightedD0D 2013-03-19 05:41:59

+0

您可以在不知道每个元素的情况下轻松遍历$ _SESSION。 – MatRt 2013-03-19 05:43:37

+0

够公平的,毕竟它是一个数组。我只知道有一种标准的方法可以一次完成它们,但无法实现它。感谢您的帮助! – DelightedD0D 2013-03-19 08:01:46

0

使用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 
(
)