我自己写的代码 
if(isset ($_SESSION['Dt'])) {
    $date=$_SESSION['Dt'];
    unset ($_SESSION['Dt']);
}
为什么有时不起作用?有时要点四次才起作用??

解决方案 »

  1.   

    在php中销毁变量有很多不同的方法。如:unset();session_unset();session_destroy();但session变量作为特殊的变量,不同的销毁方式更会产生不同的结果。unset()在php3时其使用后会返回一个boolean值,但在php4及以后的版本,其只是一个没有返回值的语句。如果在函数中unset()的一个全局变量或者一个通过引用传递的值,则其只能在局部销毁变量,在调用环境中的变量却会保持调用unset()前一样的值。如果unset一个静态变量,则静态变量及其所有引用都会被销毁。如果想unset一个globals变量则可以借用GLOBALS数组来销毁:unset($GLOBALS['str']);unset($_SESSION['str'])则可以删除单个的$_SESSION['str']变量。若使用unset($_SESSION);则删除服务器上的所有SESSION文件session_unset()删除当前所有的session值,其结果同session_destroy();
      

  2.   

    楼上不需要解释这个 这些我明白的 unset是删除单个变量 我的意思是 代码执行到unset再执行echo 却依然能输出 session变量 例如if(isset ($_SESSION['Dt'])) {
      $date=$_SESSION['Dt'];
      unset ($_SESSION['Dt']);
      echo $date;
    }这里仍然能输出$date的值,多点几次就不能输出了,这就是我的意思。麻烦各位大哥不要再长篇大论了。
      

  3.   


    <?php
    session_start();
    $_SESSION['Dt']="kk";
     echo "<a href='22.php'>aaa</a>";
    ?>
    22.php<?phpsession_start();
    if(isset ($_SESSION['Dt'])) {

      $date=$_SESSION['Dt'];
      echo $_SESSION['Dt']."*****************";
      unset ($_SESSION['Dt']);
      echo $_SESSION['Dt'];
    }
    ?>貌似没发现你说的情况还有你把$_SESSION['Dt']赋值给$date 当然可以输出了 
      

  4.   

      $date=$_SESSION['Dt'];
      unset ($_SESSION['Dt']);
      echo $date;你都赋值给$date了,unset的又不是$date,当然会输出....
      

  5.   

    按结构看,赋予了$date,你清空session以后,$date也会一直存在的,怎么会多点几下就没了呢??楼主要是说:echo $_SESSION['Dt'],如果还有值,那就是难题了!
      

  6.   

    你消除的是$_SESSION['Dt'],却输出$date,自然会有结果;如楼上所说,如果unset ($_SESSION['Dt'])之后还输出$_SESSION['Dt']就是个解释不清的难题了,可能是你遗漏了什么,你看看之前的代码。
      

  7.   

    现在我发现问题了,session变量不知道为什么一旦建立后老是存在,我用网址传递了一根Dt,$_SESSION['Dt']也会跟着$_GET['Dt']变化
      

  8.   

    session变量在你不消除它,或者浏览器不关闭的情况下一般不消失,你传递过去的时候如果session变量的值还会变的话,肯定是被重新赋值了,你贴一些代码上来吧。