如果在同一页面上清除会话变量将不会回显?

时间:2012-05-03 00:09:46

标签: php

当我在尝试回显它的同一页面上清除会话变量时,我遇到一个奇怪的问题。这是我想要做的快速类型。

举个例子;

页面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属性中运行echo时(确保仅在页面上运行一次,因为它被调用后被擦除),当我查看源页面时它没有回显任何内容。

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

然而,有趣的是,如果我输入type =“text”它可以正常工作。

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

问题仅发生在input type =“hidden”

的value属性上

2 个答案:

答案 0 :(得分:1)

您正在使用

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

如果您使用type="text",则不会在同一页面上查看它。使用type="hidden"时,您最有可能右键单击窗口并在浏览器中选择查看源。问题是,当您这样做时,相同的浏览器(如Chrome)会刷新页面。这意味着,一旦您加载页面,value属性实际上包含abc123,但当您尝试查看它时,页面会刷新,因此会话不再存在,因此{{1是空的。

答案 1 :(得分:0)

也许你两次致电get_referer()

在第一个它将回应引用并且未设置。当您调用输入时,会话中的referer不再存在,因此不打印任何内容。