在CodeIgniter裡面,使用的Session跟一般在php使用的Session不太一樣
可以參考有中文的文件,但是是舊版的:https://codeigniter.org.tw/user_guide/libraries/se…
這裡要說的是要讓特定的Session在指定的時間消失
一般使用Session的userdata都會依照config/config.php裡面的設定過期消失
要特別指定設定的話,我上網找一些方法像是
$this->session->sess_expiration = '1800'; //30 Minutes $this->config->set_item('sess_expiration', '60'); //1 minute
都沒什麼用的樣子,可能這是舊版的CI,我用的是新版3.0以上的Codeigniter
所以在新版的使用手冊裡面,在Session的單元我發現有個新的東西叫做tmpdata,可以指定session的時間
例如可以這樣寫
$this->session->set_tempdata('item', 'value', 300);//300秒過期 $this->session->tempdata('item');//取得item資料 $this->session->tempdata();//取得全部tempdata資料
將已存在的Session變成tempdata
$this->session->mark_as_temp('item', 300);
跟一般使用userdata差不多,但是文件也特別提到userdata是無法取得tmpdata的!
另外要特別注意的是,如果你想測試的時間在300秒以內,記得要去config/config.php裡面改這個設定
$config['sess_time_to_update'] = 300;
預設是300秒更新一次,所以當你設定的session小於300會看不出效果
還有一個值得一提的是flashdata,這在舊版就有了,他會在第一次向伺服器請求這個data之後就消失
像是在系統提是訊息的時候很好用,例如:某某資料已更新
使用方法也跟前面差不多
$this->session->mark_as_flash('item');//可以將已存在的Session變成flashdata $this->session->set_flashdata('item', 'value');//設定一個flashdata,當然也可以傳入陣列 $this->session->flashdata('item');//取得一個指定的flashdata,不傳值進去,育射就取得全部資料
如果想保留就這樣用,我自己試過保留過後的資料可以同時使用userdata來取得
$this->session->keep_flashdata('item'); $this->session->userdata('item');
最後這是3.0的CodeIgniter裡面Session的使用文件,是英文的