2011-01-20 44 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); 
    } 
} 
相關問題