0

我试图通过一个$_SESSION变量在两页之间传递一个值,然后将其清空,如下所示:

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

$_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

4 回答 4

0

尝试使用isset($_SESSION["elementName"])andunset($_SESSION["elementName"])代替。

于 2013-05-10T12:00:12.497 回答
0

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

$_SESSION["elementName"]="";

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

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

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

更新(如@nvanesch 评论)

我猜你的else条件已经得到满足,因为你$elemName="";在你的 else 中使用,因此你没有返回任何输出

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

于 2013-05-10T12:00:29.563 回答
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"]);
    }

}

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

于 2013-05-10T12:12:02.700 回答
0

检查下面的代码并测试它

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

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

于 2013-05-10T12:03:06.270 回答