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();

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

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

ただし、面白いことに、input type = "text"を作成すると、正常に機能します。

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

この問題は、input type="hidden"のvalue属性でのみ発生します

4

2 に答える 2

1

あなたはコンテンツを出力しています

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

を使用していた場合と同じページに表示されていませんtype="text"。を使用しtype="hidden"ているときは、ほとんどの場合、ウィンドウを右クリックして、ブラウザーで[ソースの表示] を選択します。問題は、同じブラウザー (Chrome など) がページを更新するときにページを更新することです。つまり、ページをロードすると、value属性には実際には が含まれますがabc123、表示しようとするとページが更新され、セッションが存在しなくなり、value空になります。

于 2012-05-03T00:45:57.447 に答える
0

多分あなたはget_referer()二度電話していますか?

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

于 2012-05-03T00:33:43.347 に答える