はじめに
ログインして使うシステムについて、稼働サーバのデータベースをダンプして開発環境にインポートしたら、直前まで使ってたユーザが稼働サーバにはなくてUser Not Found、さらにログアウトすらできない、という状況になったことないですか?(今なりました)
開発環境の話なんで、サーバのセッション情報を破棄すればいいかーと進めたところでハマった、という投稿です。
環境
- centos7
- php7.2
- apache2.4
↑をざくっとyumで作った環境です。
セッションファイルの保存場所
上記の環境をざくっと作ると、セッションはファイルで管理されます。破棄するのであればそのファイルを削除してしまえばOK。ということで、あとはその場所を調べるだけ。
確認箇所1:phpの設定
phpinfoに載ってます。例えばコマンドなら↓。
$ php -i | grep session.save_path
phpのiniで設定していれば上記で出力されて解決です。が、環境に書いたようにざくっと作るとsession.save_path => no value => no value
となってわかりません。
確認箇所2:apacheの設定
php.iniのsession.save_pathの説明を読んでみたら、こんなことが書いてありました。
; RPM note : session directory must be owned by process owner
; for mod_php, see /etc/httpd/conf.d/php.conf
; for php-fpm, see /etc/php-fpm.d/*conf
そういえば、この環境だとmodで読み込んでた覚えが。ではphp.confの中身はというと、
# Apache specific PHP configuration options
# those can be override in each configured vhost
#
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
php_value soap.wsdl_cache_dir "/var/lib/php/wsdlcache"
ありましたありました。php_value session.save_path "/var/lib/php/session"
とあるので、/var/lib/php/session
に格納されてることがわかりました。
おわりに
phpのセッション設定がapacheで上書きされているとは知らなかった、というハマりでした。前も同じようにハマったにも関わらず、覚えてなかったのでその戒めとして。