在CodeIgniter裡面Session的暫存資料(tempdata)與快閃資料(flashdata)

在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的使用文件,是英文的

https://codeigniter.org.tw/userguide3/libraries/se…

Leave a Reply

你的電子郵件位址並不會被公開。