2012-05-03 24 views
1

我有一個奇怪的問題,當我在同一個頁面上清除會話變量時,我試圖回顯它。這是我想要做的事情的一個快速輸入。如果在同一頁面上清除會話變量不會回顯?

以此爲例;

A頁:

$_SESSION['referer'] = 'abc123'; 
header('Location: http://www.test.com/pageb.php'); 
exit(); 

網頁B:

function get_referer() { 

    $referer = ''; 
    if (isset($_SESSION['referer'])) { 
     $referer = $_SESSION['referer']; 
     $_SESSION['referer'] = null; 
     unset($_SESSION['referer']); 
    } 
    echo $referer; 
} 

現在我做這個用的功能網頁B時...

如果我運行所有它本身的作品:

get_referer(); 

當我在輸入的值屬性中運行echo(確保只在頁面上運行一次函數,因爲它在被調用後被擦除),當我查看源頁面時,它沒有回顯任何內容。

<input type="hidden" name="referer" value="<?php get_referer(); ?>" /> 

然而,有趣的是,如果我使輸入類型=「文本」,它工作正常。

<input type="text" name="referer" value="<?php get_referer(); ?>" /> 

問題只發生在輸入型=「隱藏」

+0

我無法複製。請給我們完整的源代碼。我假設你記得兩個頁面上的'session_start()'? – kba

+0

不錯的工作準確定位和展示問題(雖然我忍不住)。 – octern

+0

@Kristian Antonsen,我嘗試了我的例子,並注意到它在原始上下文中工作。我更新了這個問題來進一步探討我的問題。 – Fase

回答

1

你輸出與

<input type="hidden" name="referer" value="<?php get_referer(); ?>" /> 

你不看它在同一頁上,你如果你使用type="text"將有內容。使用type="hidden"時,很可能是右鍵單擊窗口,然後在瀏覽器中選擇查看源代碼。問題是,當你這樣做時,相同的瀏覽器(如Chrome)會刷新頁面。這意味着,一旦加載頁面,value屬性實際上包含abc123,但是當您嘗試查看它時,頁面會刷新,因此會話不再存在,因此value爲空。

+0

Downvoter謹慎解釋爲什麼? – kba

0

也許您呼叫的get_referer()兩倍的價值屬性?

在第一個它會迴應引用和未設置。當你在輸入中調用時,引用不再存在於會話中,因此不會打印任何內容。

+0

一個基本的ctrl + f顯示我絕對不是:) – Fase