Php 在codeigniter的if-else中使用unset会话的奇怪行为
我目前的工作审计是使用CodeIgniter。为了提高交通和用户友好等级,我必须更新一些控制器。现在,我有一个操作,如果在数据库中没有找到记录,它将重定向到Php 在codeigniter的if-else中使用unset会话的奇怪行为,php,codeigniter,session,Php,Codeigniter,Session,我目前的工作审计是使用CodeIgniter。为了提高交通和用户友好等级,我必须更新一些控制器。现在,我有一个操作,如果在数据库中没有找到记录,它将重定向到/index 在/action } else if ($status == QuestionModel::DATA_EMPTY) { $_SESSION['temp'] = 'PROBLEM_DATA_EMPTY'; $this->index(); } 在/index中,我检查页面是否被重定向 if(isset($_S
/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']);
}
控制器不支持会话添加,因此我必须使用$\u会话。乐叹
因此,视图页面在表单上方添加了一个框,表示找不到数据,用户必须使用其他参数。它应该在没有绒毛的情况下工作。
将通知用户在指定参数下没有数据
但事实并非如此。此外,它还会导致一种奇怪的行为,即不会显示该框,也不会调用setEmptyData()
方法。我在上述方法中添加了echo“empty record flag set true”
,以遵循它
假设我做下一个
var_dump($_SESSION);
if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
$indexModel->setEmptyData();
}
var_dump($_SESSION);
if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
$indexModel->setEmptyData();
unset($_SESSION['temp']);
}
如您所见,我不会使用unset()
删除temp
键。它可以工作,显示框,但会话变量保留在会话数组中,这导致消息框将在页面刷新时显示。如果我在下一次会议之前检查会议
var_dump($_SESSION);
if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
$indexModel->setEmptyData();
}
var_dump($_SESSION);
if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
$indexModel->setEmptyData();
unset($_SESSION['temp']);
}
temp
字段在重定向后的会话中不可用。在我进行if检查之前,unset()
这件事就完成了。见鬼,var\u dump()
不再显示temp
键
在我的另一次尝试中,没有未设置的调用,而是更新。该字段将更新为null
var_dump($_SESSION);
if(isset($_SESSION['temp']) && ($_SESSION['temp'] == 'PROBLEM_DATA_EMPTY')) {
$indexModel->setEmptyData();
$_SESSION['temp'] = null;
}
它也不起作用。转储显示temp
字段设置为空。但是该标志不会被切换,setEmptyData()
不会出现,因为$\u会话['temp']=='PROBLEM\u DATA\u EMPTY'
为false
我现在真的为这种行为抓狂。有人知道为什么会发生这种情况吗?为什么不使用指定的方法?好问题。我以前尝试过,但控制器找不到
$this->session
,这就是我使用$\u session
的原因。我已经通知了IT部门,他们没有任何线索。。。(他们有奇怪的会话结构来验证用户)阅读文档。我引述:“会话通常会在每次页面加载时全局运行,因此会话类必须在控制器构造函数中初始化,或者可以由系统自动加载。在大多数情况下,会话类将在后台无人值守地运行,因此简单地初始化类将导致它读取、创建和更新会话。”. 阅读“初始化会话”部分的更多内容。了解以上文档。但这并不能解释为什么unset()
或$\u会话['temp']=null
在if检查之前出现…您是否尝试过$this->load->library('session')代码>在控制器构造函数中?