在我的代碼,我已經註銷功能如下如何在Codeigniter中銷燬所有具有特殊功能的會話?
function logout()
{
$this->session->sess_destroy();
// but, don't destroy this session
$this->session->userdata('admin_id');
}
如何銷燬所有的會話,除了「admin_id」?
在我的代碼,我已經註銷功能如下如何在Codeigniter中銷燬所有具有特殊功能的會話?
function logout()
{
$this->session->sess_destroy();
// but, don't destroy this session
$this->session->userdata('admin_id');
}
如何銷燬所有的會話,除了「admin_id」?
您可能需要暫時保存admin_id,並在銷燬所有會話變量後將其恢復到會話。
$temp = $this->session->userdata('admin_id');
$this->session->sess_destroy();
$this->session->set_userdata('admin_id', $temp);
它應該工作,但它不工作,奇怪。 – 2014-05-15 13:05:50
它不工作,因爲會話不會立即銷燬,而是在下次請求時銷燬。 – abimelex 2014-05-16 14:05:03
$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);
}
}
它不起作用,因爲你用OR邏輯而不是AND邏輯摧毀所有的鍵 – abimelex 2014-05-16 14:05:44
您必須保存一些關鍵的會議上,這裏是正確的代碼。
$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);
}
這會爲你工作:)
哈哈我剛剛看到你也發佈了一個正確的答案。 – abimelex 2014-05-16 14:07:22
會話破壞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);
}
}
必須保留session_id,last_activity,ip_address,user_agent鍵才能擁有有效的會話admin_id。 – 2016-05-18 12:07:41
如果你想消滅所有會話除了管理員的,或者如果你是我不明白試圖摧毀所有管理員的會話數據,但不是他的ID。 – Matthew 2011-04-20 03:02:14