セッションファイルが空で作成されてしまう

Vagrantで仮想マシンを用い、NFSでソースコードを同期した際に遭遇したトラブルです。

バージョン

PHP:5.4.28以上

同期設定

ソースコードを保管しているディレクトリをNFSで同期しました。

調査結果

当該プログラムは、セッションファイルが、同期したディレクトリに作成される仕様でした。

NFSで同期した際、共有した全てのファイルとディレクトリの所有者は、ホストでvagrant upを実行したユーザー(以下ホストユーザー)となります。グループも同様(以下ホストグループ)です。

PHPはVer5.4.28から、セッションファイルの所有者が、root、またはWebサーバーの実行ユーザーでないと、セッションファイルの作成は出来ますが、書き込みは出来なくなりました。

ソースコードをゲストOSとNFSで同期した場合、Webサーバー実行ユーザー(通常は”vagrant”)と、セッションファイルの所有者であるホストユーザーが一致しません。その為、セッションファイルは作成されるものの、書き込みが出来ず空となってしまっていた訳です。

対応

PHP標準のセッション保管ディレクトリを用いて対応しました。

下記のコマンドでシンボリックリンクを作成します。

これでセッションファイルの所有者が、Webサーバー実行ユーザーとなり、書き込み出来るようになります。