2011-01-25 13 views
1

私はcodeigniterセッションライブラリを使用して、3ページのシリーズで使用されているデータを保持しています。私のセッション変数は変わりませんが、値は消えます。見知らぬ人:セッションデータにシリアル化された配列を格納しようとしていますが、配列の最初の項目は別の変数に格納されてしまいますか?codeigniterセッションの問題 - 一部のセッション情報が固まらない

私は、次のページをクリックすることができるシリーズの最初のページから始まるリンクを添付しました。私は両方のページの上部にuser_sessionデータを印刷しました(3ページ目はまだ設定されていません)。

http://playmatics.com/nypl/site/index.php/member_area/quest/accept_quest/12

セッションは、例えば、私がログインデータを保存するためにセッションを使用していますし、それが正常に動作し、他のどこでも動作します。他の人が言ったように

私は

//CONTROLLER: 
    function accept_quest() { 
     $assoc_quest_id = end($this->uri->segments); 

     if(!isset($quest_id)) { 
      redirect('member_area/quest'); 
      //SEND A MESSAGE: NO QUEST STARTED 
     } 

     $quest_rows = $this->quest_model->get_quest_with_images($assoc_quest_id); 
     $quest = current($quest_rows); 
     $images = $this->pull_out_images($quest_rows); 

     //the data array is used both in the session, 
     //to pass values over to the next function in the quest chain 
     //and in the template 
     $data = array(); 
     $data['quest_id'] = $assoc_quest_id; 
     $data['instruction_text'] = $quest->instructions; 
     $data['quest_title'] = $quest->name; 
     $data['quest_time_limit'] = $quest->time_limit; 
     $data['points_awarded'] = $quest->points_availible; 
     $data['quest_images'] = serialize($images); 

     //save data in a flash session to be used in the next function call in the quest chain: quest_action 
     $this->session->set_userdata($data); 
     print_r($this->session->all_userdata()); 


     //the following data aren't needed in the session so they are added to the data array after the session has been set 
     $data['annotation_text'] = $quest->note;   
     $data['main_content'] = 'quests/quest_desc'; 
     $this->load->view('includes/template', $data); 
} 


function quest_action() { 
    print_r($this->session->all_userdata()); 

    $quest_id = $this->session->userdata('quest_id'); 
    echo "the quest id is: $quest_id"; 
    if(!isset($quest_id)) { 
     redirect('member_area/quest'); 
     //SEND A MESSAGE: NO QUEST STARTED 
    } 

    $data['quest_id'] = $quest_id; 
    $data['quest_title'] = $this->session->userdata('quest_title'); 
    $data['quest_images'] = $this->session->userdata('images'); 
    $data['instruction_text'] = $this->session->userdata('instructions'); 
    $data['quest_time_limit'] = $this->session->userdata('quest_time_limit'); 

    $data['main_content'] = 'quests/quest_action'; 
    $this->load->view('includes/template', $data);     
} 

//VIEW 
    //quest_desc: 
<h1><?= $quest_title ?></h1> 
    <div id="quest_elements"> 
     <figure> 
     <? foreach(unserialize($quest_images) as $image): ?> 
      <img class="media" src="<?= $image ?>" alt="<?= $quest_title ?> image"/> 
     <? endforeach; ?> 
      <figcaption>annotation: <?= $annotation_text ?></figcaption> 
     </figure> 
     <?= anchor("member_area/quest/quest_action", "Start Quest", array('title' => 'start quest')); ?> 
    </div><!-- end quest_elements --> 


    //quest_action: 
<h1><?= $quest_title ?></h1> 
    <div id="quest_elements"> 
     <figure> 
     <? foreach(unserialize($quest_images) as $image): ?> 
      <img class="media" src="<?= $image ?>" alt="<?= $quest_title ?> image"/> 
     <? endforeach; ?> 
      <figcaption>instructions: <?= $instruction_text ?></figcaption> 
     </figure> 
    <div id="timer"> 
     <?= $quest_time_limit; ?> 
    </div> 
    <?= anchor("#start_timer", "Start Timer", array('title' => 'start quest timer')); ?> 
</div> 
+0

CIは、デフォルトでセッションを保存するためにCookieを使用します。クッキーサイズの上限に達していないと確信していますか? –

+0

さらに、セッションデータを暗号化している場合は、データのサイズが増えていて、制限をさらに早く打っている可能性があります。 – k00k

+0

ああ、おそらく問題です。ありがとう! – JoeM05

答えて

3

クッキーサイズの制限を打つ場合は、CodeIgniterのネイティブDatabase Sessions classに切り替えることをお勧めします。これにより、セッション情報をデータベースに保存して、クッキーサイズの制限を効果的に削除することができます。ci_sessionsデータベースのuser_dataフィールドのサイズに制限されています。

上記のリンクに続いて、適切なDBスキーマとデータベースセッションへの設定切り替えを提供するデータベースセッションの利用に関するセクションが最後にあります。