2012-05-03 12 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(); 

エコーを入力の値属性内で実行すると(呼び出された後に消去されるため、ページ上で関数を1回だけ実行することを確認しています)、ページのソースを表示すると何もエコーしません。

<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

あなたは、あなたがtype="text"を使用していた場合は、持っているのと同じページ上でそれを見ていない

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

でコンテンツを出力しています。 type="hidden"を使用している場合は、ウィンドウを右クリックしてソースをブラウザーで選択する可能性が最も高いです。問題は、同じブラウザ(Chromeなど)がページをリフレッシュすることです。これは、一度ページを読み込むとvalue属性には実際にはabc123が含まれていますが、表示しようとするとそのページが最新表示されるため、セッションは存在しなくなるため、valueは空です。

+0

なぜDownvoterが説明してくれますか? – kba

0

を発生たぶん、あなたは二回get_referer()を呼び出していますか?

最初はリファラーをエコーし​​て設定を解除します。入力を呼び出すと、セッション中にrefererが存在しなくなり、何も印刷されません。

+0

基本的なctrl + fは私が間違いなくであることを示しています:) – Fase

関連する問題