在codeigniter中使用ifset中的未设置会话的奇怪行为

时间:2014-03-12 10:53:48

标签: php codeigniter session

我目前的工作审核是使用CodeIgniter。为了提高流量和用户友好等级,我必须更新一些控制器。现在,我有一个操作,如果在数据库中找不到记录,则会重定向到/index

/action

中的

} else if ($status == QuestionModel::DATA_EMPTY) {
    $_SESSION['temp'] = 'PROBLEM_DATA_EMPTY';
    $this->index();
}

/index中,我检查页面是否被重定向

if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
    $indexModel->setEmptyData();
    unset($_SESSION['temp']);
}

控制器不支持会话添加,所以我必须使用$ _SESSION。 le sigh

由于这种情况,视图页面在表单上方添加了一个框,表示无法找到数据并且用户必须使用其他参数。它应该没有模糊。 将通知用户指定的参数没有数据。

但是,它没有。此外,它会导致一种奇怪的行为,即不会显示该框,setEmptyData()方法也不会被调用。我在上述方法中添加了echo 'empty record flag set true'来跟随它。

假设我做下一个;

var_dump($_SESSION);
if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
    $indexModel->setEmptyData();
}

如您所见,我不会使用temp删除unset()密钥。它工作,显示框,但会话变量保留在会话数组中,这导致消息框将在页面刷新时显示。如果我在下一次检查会话;

var_dump($_SESSION);
if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
    $indexModel->setEmptyData();
    unset($_SESSION['temp']);
} 

temp字段 NOT 在AFTER重定向后的会话中可用。在进行if-check之前,unset()事情就完成了工作。哎呀,var_dump()不再显示temp键。

在我的另一次尝试中,没有未设置的调用,而是更新。该字段将使用null更新;

var_dump($_SESSION);
if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
    $indexModel->setEmptyData();
    $_SESSION['temp'] = null;
}

它也不起作用。转储显示temp字段设置为null。但是旗帜不会被切换,setEmptyData()没有发生,因为$_SESSION['temp'] == 'PROBLEM_DATA_EMPTY'是假的。

此刻我真的为这种行为感到头疼。有谁知道为什么会这样?

0 个答案:

没有答案