我知道这是一个业余的问题,但我需要回显一个会话变量,然后销毁变量。
我试过这个:
if(isset($_SESSION['m'])){
echo($_SESSION['m']);
unset($_SESSION['m']);
}
我也尝试过session_destroy();
我尝试取消/破坏页面末尾的会话(关闭HTML标记后)
我遇到的问题是会话在被回应之前被销毁。我之前使用上面的代码没有任何问题。无论如何要做我需要做的事情,还是我必须找到不同的解决方案?
提前致谢:)
答案 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();