概要
タイトルにあるように、CodeIgniter3でSessionを使うときに以下のエラーが発生してハマったので、
原因と解決方法について記録を残します。
ネットで検索すると$config['sess_save_path']
の設定をするんだよ。とか、
そのパスには777の権限にしておくんだよ。みたいな記事があるんですが、それだけでは解決しなかったので迷いました。
Message: session_start(): Failed to initialize storage module: user (path: /var/www/html/codeigniter3/application/cache)
Filename: Session/Session.php
Line Number: 143
よくある解決策
config.php
の設定でsess_save_path
の確認をした?というのがあります。
- パスが存在するか?
- パスに対して書き込み権限があるか?
application/config/config.php
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = APPPATH.'cache/';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
上記確認事項だけでは解決しませんでした。
今回の解決策
SELinuxが原因でした。
# getenforce
Enforcing
SELinuxを無効にして確認すると問題なくSessionが動作するようになりました。
# setenforce 0
# getenforce
Permissive
/etc/selinux/config
SELINUX=disabled
今回、さくらVPSで限りなく本番環境に近いような状態で開発を進めていて、なんとなくSELinuxって無効にしちゃいけないのかな?と思って無効にする選択肢を排除していたためつまづきました。
Vagrantなどで簡単に開発環境を作る時は、兎にも角にもSELinuxを無効にしてしまっていたので、今までなんの問題もなく開発できていたんですね。。。
SELinuxって結構いろんなときに邪魔してきますが、有効にした状態のまま、正常に環境を保つことはできるんだろうか。。。