我有一个带有方法的控制器,它捕获一个参数并将其设置为flash var。
问题是......如果我向这个方法发送了很多参数,使用多个firefox选项卡但是同一个用户会话,它们会混合或重新编写吗?
我的意思是,如果我打开一个标签并发送“x”参数并保存在flash var和另一个标签中,我发送参数“y”并将“x”重写为“y”或者处理为两件不同的事情? (我正在使用存储的会话)
此外,我在保存闪存数据方面遇到了麻烦。如果我在各部分之间进行更改,则不会保留下一次使用。如果我去修改/一般删除flashdata(替换为0)。
我的代码:
function modify(){
$section = $this->uri->segment(3);
switch ($section) {
case 'identity':
$this->session->keep_flashdata('item');
$this->_modify_identity();
break;
case 'general':
$this->session->keep_flashdata('item');
$this->_modify_general();
break;
case 'print':
echo $this->session->flashdata('item');
break;
default:
if(is_numeric($section)){
$this->session->set_flashdata('item', $section);
}
redirect('modify/identity');
break;
}
}
答案 0 :(得分:1)
恕我直言,flashdata意味着用于在行动后传递反馈。用户提交表单或点击某个操作,应用程序处理请求并将flashdata设置为“成功”或“失败”之类的响应。它意味着在请求之后立即使用,在下一页加载。
考虑到这一点,用户几乎不可能同时在两个标签上提交两个表单。他们的回答不能被覆盖。
另外,在旁注中,我发现使用重定向和“刷新”作为第二个参数,闪存数据工作得很好。否则,有时会失败。
答案 1 :(得分:1)
$this->session->keep_flashdata($item)
方法只保留指定的元素。使用此功能,CI应保留下一页请求的所有项目:
foreach($this->session->all_userdata() as $key => $val){
if(strpos($key,'flash:old:') > -1){ // key is flashdata
$item = substr($key , strlen('flash:old:'));
$this->session->keep_flashdata($item);
}
}
答案 2 :(得分:0)
会话带有标签。在检查这一点的方法是从一个选项卡中的CI应用程序注销,并看到所有其他选项卡要求您重新进行身份验证。
set_flashdata方法并不是会话中的持久数据存储区。它旨在跨页面传递成功和错误消息。您应该使用set_userdata method来获取应该在整个会话期间保持的数据(或直到您决定删除它)。