[英]echo $_SESSION then unset
我知道這是一個業余問題,但我需要回顯一個 session 變量,然后銷毀該變量。
我試過這個:
if(isset($_SESSION['m'])){
echo($_SESSION['m']);
unset($_SESSION['m']);
}
我也試過 session_destroy();
並且我嘗試在頁面末尾取消設置/銷毀 session(關閉 HTML 標簽后)
我遇到的問題是 session 在回顯之前就被破壞了。 我之前使用過上面的代碼沒有任何問題。 無論如何我需要做的事情,還是我必須找到不同的解決方案?
提前致謝:)
我知道這有點晚了,但最近我遇到了這個問題,我會為任何需要它的人回答。
我很確定您使用header
方法重定向到未unset
session 的同一頁面。 這些方面的東西:
<?php
if(condition)
$_SESSION = "foo";
header("Location: $self");
?>
<html>
...
<?php echo $_SESSION["foo"]; unset($_SESSION["foo"]); ?>
...
header
的問題在於它不會停止腳本的執行(看起來如此),因此腳本繼續執行並取消設置 session。
解決方案是在 header 重定向之后添加exit(0)
(或您可能需要的任何標志),如下所示:
<?php
if(condition)
$_SESSION = "foo";
header("Location: $self");
exit(0);
?>
這確實是一個非常晦澀難懂的問題,也是一個耗時的問題。
問題是 $_SESSION 是一個引用,所以當你復制它(或其中的一些偏移量)時,你實際上是在復制一個引用。 IE:
$a = $_SESSION['a'];
正在將 $_SESSION['a'] 的指針值復制到 $a,因此它們指向 memory 中的相同位置。 因此,當您取消設置 $_SESSION['a'] 時,您將刪除 $a 指向的數據。 這就是為什么 $a 似乎在你的回聲中消失了。
這個答案並不能解決問題或課程,但它至少解釋了發生了什么。
在 < html > 標簽上方輸入。
<?php
session_start();
if(isset($_SESSION['m']))
$_SESSION['m']=$_SESSION['m']+1;
else
$_SESSION['m']=1;
echo "Session = ". $_SESSION['m'];
?>
並在 </html> 標簽下面輸入這個
<?php
if(isset($_SESSION['m']))
unset($_SESSION['m']);
?>
我剛剛又遇到了這個問題,而且我似乎總是以不同的方式解決它。 這一次,我決定 go 與 php、jquery 和 Z2705A34.53A5A06387CEDACE 的組合
<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>
這個腳本在我的導航菜單上,它包含在每個頁面上,因此我可以輕松地向用戶所在的任何頁面發送消息。 It loads the session message into a javascript var, then alerts the user and then loads a php page into the hidden "dump" div, that just unsets the session message so it doesn't alert any more than once.
killthemessenger.php
<?php
session_start();
unset($_SESSION['message']);
?>
本的回答對我來說不太適用。 無論出於何種原因,我的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"]);
}
}
你應該使用 die(); 在 header 重定向之后。
header("Location: index.php");
die();
我認為這可能會對您有所幫助,或者至少使您朝着正確的方向前進。 嘗試將每個動作都放入自己的 if 語句中。
if ((isset($_SESSION['m']))) {
echo $_SESSION['m'];
}
if ((isset($_SESSION['m']))) {
unset($_SESSION['m']);
}
或者也許這個
if(isset($_SESSION['m'])){
$sessionVar = $_SESSION['m'];
unset($_SESSION['m']);
echo $sessionVar;
}
使用它也許它有效:
if(isset($_SESSION['m'])){
echo($_SESSION['m']);
str_pad(' ',4096);
flush();
sleep(1); // You can remove this line
unset($_SESSION['m']);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.