在我的代码中,我有注销功能,如下所示
function logout()
{
$this->session->sess_destroy();
// but, don't destroy this session
$this->session->userdata('admin_id');
}
如何销毁所有会话,除了'admin_id'?
答案 0 :(得分:3)
CI中的会话销毁是在下一个请求时执行的,因此您无法在没有请求的情况下销毁会话并打开新会话。
但您可以取消设置所有会话数据,除了您要保留的数据以及Codeigniter需要保留会话的数据。这取决于会话的配置方式,默认情况下是用户代理,最后一个活动和会话ID。请参阅CI-Session class偏好设置(位于页面底部)
此功能删除除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);
}
}
答案 1 :(得分:2)
您可能希望暂时保存admin_id,并在销毁所有会话变量后将其重新置于会话中。
$temp = $this->session->userdata('admin_id');
$this->session->sess_destroy();
$this->session->set_userdata('admin_id', $temp);
答案 2 :(得分:1)
你必须在会话中保存一些密钥,这里是正确的代码。
$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);
}
这对你有用:)
答案 3 :(得分:0)
$this->session->sess_destroy();
会破坏会话的session_id
和last_activity
。因此会话不再存在。所以这不会奏效。
试试这个:
$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);
}
}