PHP取消设置$ _SESSION ['variable']也取消设置局部变量

时间:2014-02-28 16:02:31

标签: php session

取消设置会话变量时遇到问题。

在一个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次;

有没有人知道可能导致这种行为的原因是什么?

2 个答案:

答案 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);