PHPのセッションファイルの保存場所と設定場所
2020年06月27日 プログラミングTIPS
前記事「PHPでセキュアなクッキーとセッション」からの続きです。
サーバー内でPHPのセッションファイルがどこに保存されているか知りたいとき、ありますよね。サーバー、OS、Webサーバー、PHPを入れ替えたときなどは特に(なかなか変える機会はないですが)。
そんなときは、PHP関数のphpinfo()関数を実行すれば、セッションファイルの格納場所がわかります。以下のようにphpinfo.phpというファイルを作り(ファイル名は適当です)、実行します。
アクセスすると、サーバーのPHP情報一覧が表示されます。その中にsessionセクションがあり、session.save_pathの項目に、セッションファイルのパスが以下のような感じで書かれています。
これでPHPのセッションファイルがどこに保存されているかわかりました。
続いて、このセッション保存場所をどこでどのように設定しているのか、サーバーからコマンドを入力して調べてみます。
今利用しているサーバーの場合、session.save_pathはno valueでした。「設定されていないのに、設定されている?」と不思議な気持ちになります。詳しくは、php.iniを開いて確認してみます。CentOS8の場合、以下の場所にphp.iniファイルはあります(もしphp.iniの場所がわからない場合は、上記phpinfo.phpを実行して、「Loaded Configuration File」の項目を確認してみて下さい)。
php.iniの中を確認しても、session.save_pathの行はコメントアウトされていて、何も書かれていません。代わりにこんなものがありました。
サーバー内でPHPのセッションファイルがどこに保存されているか知りたいとき、ありますよね。サーバー、OS、Webサーバー、PHPを入れ替えたときなどは特に(なかなか変える機会はないですが)。
そんなときは、PHP関数のphpinfo()関数を実行すれば、セッションファイルの格納場所がわかります。以下のようにphpinfo.phpというファイルを作り(ファイル名は適当です)、実行します。
<?php
phpinfo();
?>
session.save_path /var/lib/php/session /var/lib/php/session
これでPHPのセッションファイルがどこに保存されているかわかりました。
続いて、このセッション保存場所をどこでどのように設定しているのか、サーバーからコマンドを入力して調べてみます。
php -i | grep session.save_path
session.save_path => no value => no value
/etc/php.ini
; 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
;session.save_path = "/tmp"
/etc/httpd/conf.d/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"
現在稼働させているサーバーは、CentOS8.1のNginx環境で、PHPをphp-fpmで動かしています(LAMP環境からLEMP環境になりました参照)。そのため、詳しい設定は/etc/php-fpm.d/*confに書かれていることになります。ということで、以下のファイルを開いてみます。
vi /etc/php-fpm.d/www.conf
; Set the following data paths to directories owned by the FPM process user.
;
; Do not change the ownership of existing system directories, if the process
; user does not have write permission, create dedicated directories for this
; purpose.
;
; See warning about choosing the location of these directories on your system
; at http://php.net/session.save-path
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
また、PHPでセキュアなクッキーとセッションにも書いたように、デフォルトのセッション時間から変更させる場合は、セッションの保存場所は変更した方が良いです。