Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在codeigniter的if-else中使用unset会话的奇怪行为_Php_Codeigniter_Session - Fatal编程技术网

Php 在codeigniter的if-else中使用unset会话的奇怪行为

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

我目前的工作审计是使用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']);
}
控制器不支持会话添加,因此我必须使用$\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')在控制器构造函数中?