我正在尝试通过$_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
答案 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"]);
}
}
这与你想要做的非常相似,所以我不确定为什么它不适合你,但你可能想尝试一下。你显然需要让会话开始。