2011-01-20 8 views
2

私はそこにメソッドを持つコントローラを持っています。引数を受け取り、それをフラッシュ変数にセットします。Codeigniterにフラッシュデータを保存する方法は?

質問は...複数のFirefoxのタブを使用して同じユーザーセッションを使用して、このメソッドに多くの引数を送信すると、それらは混在したり書き換えられる可能性がありますか?

私はタブを開いて "x"引数を送ってフラッシュvarと別のタブに保存すると、引数 "y"を送り、 "x"は "y"で書き換えられたり、 2つの異なるもののように? (私は保存されたセッションを使用しています)

また、私はフラッシュデータを維持するのに苦労しています。セクション間で変更すると、次の使用のために保存されません。私が/ generalを変更すると、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

IMHO、flashdataこれは、アクションの後にフィードバックを渡すために使用されることを意味します。ユーザーがフォームを送信するか、何らかのアクションをクリックすると、アプリケーションはリクエストを処理し、 "成功"または "失敗"のような応答としてフラッシュデータを設定します。これは、リクエストの直後に、次のページのロード時に使用されることを意味します。

これを念頭において、2つのフォームを同時に2つのタブに送信することはほとんどありません。それらの応答は上書きできません。

また、私は、フラッシュデータが、 "リフレッシュ"を第2のパラメータとしてリダイレクトを使用して優れていることを発見しました。それ以外の場合、失敗することがあります。

0

セッションは、タブ間で運びます。これを確認するには、CIアプリケーションから1つのタブでログアウトし、他のすべてのタブで再認証を求めていることを確認してください。

set_flashdataメソッドは、セッション内の永続データストアではありません。それは成功とエラーメッセージのようなものをページ全体に運ぶことを意味します。セッション中(または削除を決定するまで)持続するデータの場合は、set_userdata methodを使用してください。

+0

肯定値は置き換えられますが、keep_flashdataメソッドを使用してフラッシュデータを保持できません。 –

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); 
    } 
} 
関連する問題