ZAPAnet総合情報局 > ZAPAブログ2.0 > PHPのセッションファイルの保存場所と設定場所

PHPのセッションファイルの保存場所と設定場所

2020年06月27日 プログラミングTIPS
前記事「PHPでセキュアなクッキーとセッション」からの続きです。

サーバー内でPHPのセッションファイルがどこに保存されているか知りたいとき、ありますよね。サーバー、OS、Webサーバー、PHPを入れ替えたときなどは特に(なかなか変える機会はないですが)。

そんなときは、PHP関数のphpinfo()関数を実行すれば、セッションファイルの格納場所がわかります。以下のようにphpinfo.phpというファイルを作り(ファイル名は適当です)、実行します。
<?php
  phpinfo();
?>
アクセスすると、サーバーのPHP情報一覧が表示されます。その中にsessionセクションがあり、session.save_pathの項目に、セッションファイルのパスが以下のような感じで書かれています。
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
今利用しているサーバーの場合、session.save_pathはno valueでした。「設定されていないのに、設定されている?」と不思議な気持ちになります。詳しくは、php.iniを開いて確認してみます。CentOS8の場合、以下の場所にphp.iniファイルはあります(もしphp.iniの場所がわからない場合は、上記phpinfo.phpを実行して、「Loaded Configuration File」の項目を確認してみて下さい)。
/etc/php.ini
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
;session.save_path = "/tmp"
mod_phpで動かしている場合、conf.d/php.confにあるということでした。
/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"
もしmod_phpで動かしているのなら、phpセッションファイルはここで設定されています。

現在稼働させているサーバーは、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をnginxのphp-fpmで動かしている場合、www.confでセッションのsession.save_pathを設定していることがわかりました。変更したいときは、ここをいじればOKです。

また、PHPでセキュアなクッキーとセッションにも書いたように、デフォルトのセッション時間から変更させる場合は、セッションの保存場所は変更した方が良いです。