开发者

How to Destroy All Session With Exceptional in Codeigniter?

开发者 https://www.devze.com 2023-02-26 07:43 出处:网络
In my code, I have logout function as below function logout() { $this->session->sess_destroy(); // but, don\'t destroy this session

In my code, I have logout function as below

function logout() 
{
    $this->session->sess_destroy();  

    // but, don't destroy this session
    $this->session->userdata('admin_id');
}

开发者_如何学编程How to destroy all session, except 'admin_id'?


The Session destroy in CI is performed at the next request, so you can't destroy a session and open a new session without a request in between.

But you could unset all session data except the data you like to keep and the data Codeigniter needs to keep the session. This Depends how session is configured, by default is it the User Agent, the last activity and the session ID. See CI-Session class preferences (at bottom of page)

This function deletes all session data except the admin_id

 $sessionData = $this->session->all_userdata();
 foreach($sessionData as $key =>$val){
    if($key!='session_id' 
       && $key!='last_activity' 
       && $key!='ip_address' 
       && $key!='user_agent' 
       && $key!='admin_id'){
         $this->session->unset_userdata($key);
     }
  }


You might want to save the admin_id temporarily and just put it back to session after you destroyed all your session vars.

$temp = $this->session->userdata('admin_id');
$this->session->sess_destroy();
$this->session->set_userdata('admin_id', $temp);


you must save some of keys in session, here is correct code.

$sess_array = $this->session->all_userdata();
foreach($sess_array as $key =>$val){
   if($key!='session_id'
      && $key!='last_activity'  
      && $key!='ip_address'  
      && $key!='user_agent'  
      && $key!='RESERVER_KEY_HERE')$this->session->unset_userdata($key);
}

This will work for you :)


$this->session->sess_destroy(); destroys the session_id and last_activity of the session. So the session no longer exist. So this wont work.

Try this:

$sess_array = $this->session->all_userdata();

foreach($sess_array as $key =>$val){

   if($key!='session_id'||$key!='last_activity'||$key!='admin_id'){
   $this->session->unset_userdata($key);
    }

  }
0

精彩评论

暂无评论...
验证码 换一张
取 消