Codeigniter:在会话销毁时删除会话tempdata

时间:2016-03-25 13:04:27

标签: php codeigniter session

我需要在页面上显示一些数据只有20分钟。为此,我在codeigniter中使用tempdata

实际上tempdata是会话数据,我使用mark_as_temp方法将其标记为tempdata

这是我的代码

 public function final_result()
    {
    //make the session data as tempdata    
        $this->session->mark_as_temp(
          array('hotel_basic','user_ht_bk_data','hotel_info','hotel_search_query','booking_response','ht_star_rating','each_rooms'),1200       
        );     
      //after marking as tempdata destroy the original sessiondata
      $this->session->sess_destroy();
     //read from the tempdata
      $data['result']=$this->session->tempdata('user_ht_bk_data');

      $this->view('final-view',$data);
    }

但是$data['result']将返回空值。

根据codeigniter文档sess_destroy()永远不会删除tempdata。

但在我的情况下,tempdata在执行session_destroy

时被删除

2 个答案:

答案 0 :(得分:1)

  

使用sess_destroy()后,所有会话数据( 包括flashdata和tempdata )将被永久销毁,并且在此期间功能将无法使用在销毁会话后请求

Destroying a Session In Codeigniter

<强>解决方案

  1. 像往常一样显示最终结果(没有会话销毁)并制作 countdown with JavaScript在20分钟内摧毁会议。
  2. Use cookies

答案 1 :(得分:-1)

这是因为要设置为tempdata的数据必须事先已在会话中退出。作为stated in the documentation,您需要尝试以下内容:

$_SESSION['user_ht_bk_data'] = 'Test string'; // Or use set_tempdata with $this->session->set_tempdata('user_ht_bk_data', 'Test string', 300);
$this->session->mark_as_temp( 'user_ht_bk_data', 1200 ); // No need to use this if you used set_tempdata();
$this->session->sess_destroy();
$data['result']=$this->session->tempdata('user_ht_bk_data');