最近用 codeigniter 寫一個小系統,引用了session 庫,codeigniter默認的session存儲方式為files。鑒於安全性,文件即肯定涉及到權限問題。
在類 UNIX 操作系統中,這可以通過在該目錄上執行 chmod 命令,將權限設置為 0700 來實現, 這樣就可以只允許目錄的所有者執行讀取和寫入操作。但是要注意的是,腳本的執行者通常不是你自己, 而是類似於 'www-data' 這樣的用戶,所以只設置權限可能會破壞你的程序。
但用戶買的是萬網的虛擬主機,默認是沒有開啟 chmod 函數的設置。於是就碰到了這個問題:"chmod() has been disabled for security reasons"。解決方法有兩個:
1.開啟設置
登錄萬網虛擬主機控制面板:點擊左側【高級環境設置】->【php.ini設置】,將【chmod函數】設置為開啟。
2.更換session存儲方式為數據庫驅動
在config.php文件里設置
$config['sess_driver'] = 'database';
$config['sess_save_path'] = 'ci_sessions';
要求在數據庫中建表:ci_sessions
,如MySql:
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(40) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
KEY `ci_sessions_timestamp` (`timestamp`)
);
參考資料
http://codeigniter.org.cn/user_guide/libraries/sessions.html
https://help.aliyun.com/knowledge_detail/36434.html