echo $ _SESSION然后取消设置

时间:2011-07-03 16:05:02

标签: php session

我知道这是一个业余的问题,但我需要回显一个会话变量,然后销毁变量。

我试过这个:

if(isset($_SESSION['m'])){
   echo($_SESSION['m']);
   unset($_SESSION['m']);
}

我也尝试过session_destroy();

我尝试取消/破坏页面末尾的会话(关闭HTML标记后)

我遇到的问题是会话在被回应之前被销毁。我之前使用上面的代码没有任何问题。无论如何要做我需要做的事情,还是我必须找到不同的解决方案?

提前致谢:)

9 个答案:

答案 0 :(得分:12)

我知道有点晚了但最近我遇到了这个问题,我会为需要它的人回答。

我非常确定您使用header方法对会话的unset进行了重定向。这些方面的东西:

<?php
    if(condition)
        $_SESSION = "foo";
    header("Location: $self");
?>
<html>
    ...
    <?php echo $_SESSION["foo"]; unset($_SESSION["foo"]); ?>
    ...

header的问题在于它不会停止执行脚本(看起来如此),因此脚本继续执行并取消设置会话。

解决方案是在标题重定向后添加exit(0)(或您可能需要的任何标记),如下所示:

<?php
    if(condition)
        $_SESSION = "foo";
    header("Location: $self");
    exit(0);
?>

这确实是一个非常模糊的问题,也是一个耗时的问题。

答案 1 :(得分:0)

我认为这可能会帮助你一点点,或至少让你朝着正确的方向前进。尝试将每个动作抛入自己的if语句中。

if ((isset($_SESSION['m']))) {
echo $_SESSION['m'];
}
if ((isset($_SESSION['m']))) {
unset($_SESSION['m']);
}

答案 2 :(得分:0)

或许这个

if(isset($_SESSION['m'])){
   $sessionVar = $_SESSION['m'];
   unset($_SESSION['m']);

   echo $sessionVar;
}

答案 3 :(得分:0)

使用它可能有效:

if(isset($_SESSION['m'])){
   echo($_SESSION['m']);
   str_pad(' ',4096);
   flush();
   sleep(1); // You can remove this line 
   unset($_SESSION['m']);
}

答案 4 :(得分:0)

问题是$ _SESSION是一个引用,所以当你复制它(或它内部的一些偏移)时,你实际上是在复制一个引用。即:

$a = $_SESSION['a'];

将$ _SESSION ['a']的指针值复制到$ a,以便它们指向内存中的相同位置。因此,当您取消设置$ _SESSION ['a']时,您将删除$ a指向的数据。这就是为什么$ a似乎在你的回声中消失了。

这个答案并没有解决问题,或者当然,但它至少解释了发生了什么。

答案 5 :(得分:0)

在<&lt;&lt; html&gt;标签。

<?php
 session_start();
 if(isset($_SESSION['m']))
      $_SESSION['m']=$_SESSION['m']+1;
 else
      $_SESSION['m']=1;
 echo "Session = ". $_SESSION['m'];
 ?> 

并在下面输入&lt; / html&gt;标签

 <?php

      if(isset($_SESSION['m']))
          unset($_SESSION['m']);
 ?> 

答案 6 :(得分:0)

我刚刚遇到这个问题,我似乎总是以不同的方式解决它。这一次,我决定使用php,jquery和ajax的组合。

<script>
var message = '<?php echo $_SESSION['message'];?>';
$(document).ready(function(){
if (message != ''){
alert(message);
$('#dump').load("http://{your absolute path here}/killthemessenger.php");   
}
});
</script>
<div class="hidden" id="dump" >This Should Be Hidden With CSS</div>

此脚本位于我的导航菜单上,该菜单包含在每个页面上,因此我可以轻松地向用户所在的任何页面发送消息。它将会话消息加载到javascript var中,然后警告用户,然后将php页面加载到隐藏的&#34; dump&#34; div,只是取消设置会话消息,因此它不会提醒任何一次。

killthemessenger.php

<?php
session_start();
unset($_SESSION['message']);
?>

答案 7 :(得分:0)

Ben的回答对我而言并不奏效。无论出于何种原因,我的exit()仍在close()之后开火。

虽然不漂亮,但是我可以使用它:

if(condition) {
    $_SESSION["foo"] = "print this";
    $_SESSION["bar"] = 1;
    header("Location: $self");
}
<html>
...
<?php
if(isset($_SESSION["foo"])){
    echo($_SESSION["foo"]);
    $_SESSION["bar"] += 1;
    if($_SESSION["bar"] >=3) {
        unset($_SESSION["foo"]);
        unset($_SESSION["bar"]);
    }
}

答案 8 :(得分:0)

您应该使用die();标头重定向之后。

header("Location: index.php");
die();