会话变量的PHP内容

时间:2013-05-10 11:56:43

标签: php session-variables

我正在尝试通过$_SESSION变量传递2页之间的值,然后将其清空,如下所示:

我在一个PHP页面上为会话变量赋值:

$_SESSION["elementName"]="a_373";

尝试将其存储在另一页的变量中,如下所示:

if (!empty($_SESSION["elementName"])) {
    $elemName=$_SESSION["elementName"];
    $_SESSION["elementName"]="";
} else {
    $elemName="";
}

打印出来时,$elemName的值始终为空。但是,当我从上面的代码中删除$_SESSION["elementName"]="";行时,我得到了正确的打印输出。

修改:我正在打印$elemName而不是$_SESSION["elementName"] - print($elemName);

我在PHP 5.3.2的共享主机帐户上,register_globals设置为关闭(根据phpinfo();)。

一旦我获得了它的值,我需要重置/清空会话变量,但它不起作用,这在过去几天一直困扰着我。有什么想法吗?谢谢!

编辑:

其他线索:我在if语句之前使用会话的var_dump进行了测试,并在else部分为$ elemName设置了另一个值,如下所示:

var_dump($_SESSION["elementName"]);

$elemName="x";

if (isset($_SESSION["elementName"]) && !empty($_SESSION["elementName"])) {
    $elemName=$_SESSION["elementName"];
    $_SESSION["elementName"]="";
} else {
    $elemName="None";
}

print("<br />".$elemName);

我得到了这个结果:

string(5) "a_373"
None

4 个答案:

答案 0 :(得分:0)

请尝试使用isset($_SESSION["elementName"])unset($_SESSION["elementName"])

答案 1 :(得分:0)

你打印出$elemName吗?如果是,则不应该有任何空白输出除非并且直到您的else条件返回true ,但是如果您打印的是$_SESSION["elementName"],那么您将不会得到任何输出将它变成空白

$_SESSION["elementName"]="";

正确删除会话var的方法是使用unset($_SESSION["elementName"])

虽然如果你想让它为空,== ''就足够了

使用unset()时也要小心,因为在取消设置会话并稍后使用该索引进行打印后,它将显示未定义的索引错误。

更新(如@nvanesch评论)

  

我猜你的else条件越来越满意,因为你是   在你的其他地方使用$elemName="";,因此你不会被归还   输出

如果您未在页面顶部使用if (!empty($_SESSION["elementName"])) {session_start()也将返回false

答案 2 :(得分:0)

检查以下代码并进行测试

if (isset($_SESSION["elementName"]) && $_SESSION["elementName"]!="") {
    $elemName=$_SESSION["elementName"];
    $_SESSION["elementName"]="";
} else {
    $elemName="";
}

清空只检查值是否为空,但是通过isset我们可以检查可变退出并且不包含空值

答案 3 :(得分:0)

我曾经创建过这个类,以便能够拥有这种能力,并且它的工作非常好:

<?php

class Flash {

    public function set($key, $message) {
        $_SESSION["flash_$key"] = $message;
    }

    public function get($key) {
        $message = $_SESSION["flash_$key"];
        unset($_SESSION["flash_$key"]);
        return $message;
    }

    public function has($key) {
        return isset($_SESSION["flash_$key"]);
    }

}

这与你想要做的非常相似,所以我不确定为什么它不适合你,但你可能想尝试一下。你显然需要让会话开始。