取消设置会话变量时遇到问题。
在一个PHP脚本中,我创建了一个会话变量
$_SESSION['flash_message'] = "Information successfully added!";
然后我将用户重定向到主页并执行以下操作:
var_dump($_SESSION);
if (isset($_SESSION['flash_message']) {
$message = $_SESSION['flash_message'];
echo $message;
unset($_SESSION['flash_message']);
}
var_dump($_SESSION);
var_dump($message);
问题是这不仅会导致$_SESSION['flash_message']
取消设置$message
。
如果我没有取消任何设置,那么我会得到所有3个var_dump
和回声的响应。
如果我这样做:
if (empty($message)) {
unset($_SESSION['flash_message']);
}
然后没有任何东西被取消,我再次可以看到这个值4次;
有没有人知道可能导致这种行为的原因是什么?
答案 0 :(得分:1)
您可能需要检查register_globals
的价值
您可以在.htaccess文件中将其设置为关闭
php_flag register_globals off
如果 ,$_POST['example']
和$_GET['example']
都可通过$example
访问。
将未设置应用于该逻辑,并且您知道为什么该var未设置
答案 1 :(得分:0)
感谢大家,如果找到解决方案,虽然我仍然不确定究竟是什么导致了这个问题。
无论如何,我现在正在使用我的Session类来处理消息的设置和取消设置(正如我本来应该做的那样)。
在我的课程课程中,我现在这样做:
function __construct() {
session_start();
$this->check_message();
}
public function message($msg=""){
if(!empty($msg)){
$_SESSION['message'] = $msg;
}else{
// get message
return $this->message;
}
}
private function check_message(){
if(isset($_SESSION['message'])){
// Add it to an attribute and erase the stored version
$this->message = $_SESSION['message'];
unset($_SESSION['message']);
}else{
$this->message = "";
}
}
在我的控制器中,我这样做:
$session->message("Details successfully updated!");
在我看来:
$helper->display_message($errors, $session->message, $errors_heading);