2012-05-09 36 views
2

有沒有辦法在會話中取消設置所有用戶數據而不必使用會話銷燬?我正在嘗試登錄我的用戶,並且需要一次取消所有用戶數據。跟蹤會話中設置的所有可能的用戶數據變得單調乏味。我只想解除可能在userdata中設置的所有內容。CodeIgniter:取消設置所有用戶數據,但不會破壞會話

+0

到底爲什麼你不希望使用'$ this-> session-> sess_destroy();',因爲它確實做了你想做的事情? –

+0

我修改了我的答案,以更好地回答你的問題。 – envysea

回答

14

這很簡單!

$this->session->unset_userdata('some_name'); 

$array_items = array('username' => '', 'email' => ''); 
$this->session->unset_userdata($array_items); 

我希望這有助於!

編輯:它看起來像你實際上沒有跟蹤會議中的任何事情(有點奇怪?)。你可以調用這個函數,我寫了:

function unset_only() { 
    $user_data = $this->session->all_userdata(); 

    foreach ($user_data as $key => $value) { 
     if ($key != 'session_id' && $key != 'ip_address' && $key != 'user_agent' && $key != 'last_activity') { 
      $this->session->unset_userdata($key); 
     } 
    } 
} 

當然,這假設你使用默認的CI會話建立雖然。

+0

我不想在userdata中不小心留下不應該在那裏的東西。我認爲你的解決方案可能工作。也許這會很好地覆蓋'unset_userdata',這樣它就可以使用一個不能通過的鍵(它只會全部刪除)。思考? – StackOverflowNewbie

2

從笨論壇複製:

它所做的就是殺死了用戶的cookie,但用戶數據將 保持會話類中,直到當前請求結束。 會話將在下一個請求中重新初始化,並且 不會有用戶數據可用。基本上,它所做的只是切斷用戶和服務器會話之間的鏈接 ,但直到請求結束,數據仍然保留爲 。

如果這是一個問題了,你可以這樣做:

$這個 - >會話級>用戶數據=陣列();

1

我管理它,請嘗試。

$this->load->library('session'); 

//寫參數會話數據

$this->session->unset_userdata('sessiondata'); 

//如果你想取消設置會話組那就試試吧

$array_items = array('username' => '', 'email' => ''); 

$this->session->unset_userdata($array_items);