2011-01-20 26 views
2

我有一个控制器,它有一个方法,它捕获一个参数并将其设置在一个flash var。如何在Codeigniter中保持Flash数据?

的问题是...如果我发送许多争论这种方法,使用多个Firefox的标签,但相同的用户会话,他们可以得到混合或rewrited?我的意思是,如果我打开一个选项卡并发送“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; 
    } 
} 

回答

1

恕我直言,flashdata它意味着要使用的动作后,通过反馈。用户提交表单或点击某个动作,应用程序处理请求并将Flash数据设置为“成功”或“失败”等响应。它的意思是在请求之后立即使用,在下一页加载。

考虑到这一点,您的用户几乎不可能同时在两个选项卡上提交两个表单。他们的回应不能被覆盖。

另外,在一个侧面说明中,我发现闪存数据使用重定向和“刷新”作为第二个参数很好用。否则,有时会失败。

0

会话中的标签之间进行。在检查这种情况的方法是在一个选项卡中注销您的CI应用程序,并查看所有其他选项卡要求您重新进行身份验证。

的set_flashdata方法并不意味着可以在会话持久性数据存储。它意味着跨页面传递成功和错误消息等内容。您应该使用set_userdata method来查找应该在整个会话中持续存在的数据(或者直到您决定删除它)。

+0

是值被替换,但我仍然不能保持Flash数据使用keep_flashdata方法。 – 2011-01-21 19:09:27

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); 
    } 
} 
相关问题