我目前的工作审核是使用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'
是假的。
此刻我真的为这种行为感到头疼。有谁知道为什么会这样?