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

php

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」にしてもアクセスできますが、セキュリティ上望ましくないので絶対にやめましょう!

 
Secured By miniOrange
タイトルとURLをコピーしました