簡體   English   中英

echo $_SESSION 然后取消設置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM