PHPでsessionが引き継げない場合に見落としがちな対処方法

PHPでsessionが引き継げない場合に見落としがちな対処方法

Nginx + PHPの構成で動作しているサーバでセッションが引き継げない事象に遭遇しました。

よく言われる対処方法は以下のとおり。

  • 「<?php」の直後に「sessin_start()」 を配置すること。
  • ブラウザでクッキーをブロックしていないこと。
  • 同じドメイン内でのリダイレクトであること。

今回はこれ以外の対応が必要でした。

結論から申し上げると、原因は「ディレクトリの権限」でした。

セッション情報をファイルに保存する構成をとっていたのですが、この場合、デフォルトで「/var/lib/php/session」に保存されます。ファイルに保存されるかどうかはphp.iniの「session.save_handler」の項目で確認できます。

以下のようになっていればファイル保存ですね。

現在保存されているか確認します。

はい、保存されていません。

では、ディレクトリの権限はどうなっているのか。確認してみます。

んん??なぜかグループがapacheになっています。

これをnginxに変更してみます。

続いてブラウザでアクセスしてみます。

こちらがブラウザアクセス後の同ディレクトリ内の状況です。

無事ファイルが作成されました。

これは見落としがちですね。カモトラも初めての事象でした。
基本と言えば基本なんですが、sessionが引き継げない場合の見落としがちな箇所ですね。

こういった対処が必要になる場合もあるので、sessionが引き継げなくてハマってしまった方は確認してみて下さい!

今回はnginxで使用していたためnginxグループに変更しましたが、apacheを使用していて、ここがnginxになっている場合はapacheグループに変更しましょう。

※nginxやapacheでの起動グループを変更している場合はこの限りではありません。自身の環境に合わせてください。

ちなみに、このディレクトリの権限を「777」にしてもアクセスできますが、セキュリティ上望ましくないので絶対にやめましょう!

 
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする