CodeIgniter 提供功能豐富的 Session 庫,支持文件、數據庫多種存儲驅動,內置加密、指紋驗證、垃圾回收等安全機制。本文詳解配置與使用全流程。
編輯 application/config/config.php:
$config['encryption_key'] = 'your_random_string_here'; // 必填,不能為空
編輯 application/config/autoload.php:
$autoload['libraries'] = array('session');
或在控制器構造函數中手動加載:
$this->load->library('session');
// 單值設置
$this->session->set_userdata('name', 'yang');
// 批量設置(關聯數組)
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
$name = $this->session->userdata('name'); // 返回值或 FALSE
$session_id = $this->session->userdata('session_id');
// 刪除單項
$this->session->unset_userdata('some_name');
// 批量刪除
$items = array('username' => '', 'email' => '');
$this->session->unset_userdata($items);
$this->session->sess_destroy();
CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
| 參數 | 默認值 | 說明 |
|---|---|---|
| sess_cookie_name | ci_session | Cookie 名稱 |
| sess_expiration | 7200 (2小時) | Session 生命周期(秒),0為永久 |
| sess_expire_on_close | FALSE | 瀏覽器關閉時是否過期 |
| sess_encrypt_cookie | FALSE | 是否加密 Cookie 數據 |
| sess_match_ip | FALSE | 驗證 IP(動態 IP 環境建議關閉) |
| sess_match_useragent | TRUE | 驗證 User Agent |
| sess_time_to_update | 300 | Session ID 重新生成間隔(秒) |
sess_encrypt_cookie 和數據庫存儲