PHPでSESSIONを引き継げないが原因不明…UTF-8(BOM付き)になってませんか?

この度ロリポップサーバーで公開しているWebアプリケーションで一部セッション情報を引き継げないページが発生したため、トラブルシューティングの記事となります。

事象が発生したのはとあるサービスの管理画面なのですが、以下のような状態でした。

users.php ログイン判定不能
rooms.php ログイン判定不能
casts.php ログイン判定可

ログイン判定ができないことからいろいろな個所を調査しましたが、ファイルの冒頭session_start後にすでにセッション情報が空であることを確認。casts.phpではセッション情報が取れているのでふたつを比較してみても疑われるような記述の誤りは見つかりませんでした。

そこでできるだけ記述をシンプルにしてみようと、session_startとセッション情報をvar_dumpするだけのファイルを作成してみたところ、これも動かず・・・

さすがにこれはおかしいとうことでファイルの文字コードを調べてみました。するとこのファイルだけなぜか文字コードが「UTF-8(BOM付き)」となっていました。

これをメモ帳で開いてUTF-8で保存しなおしてアップロードしたら無事にセッション情報を引き継ぐことができました。

PHPでセッション情報の引継ぎがうまくいかずコードに原因が見当たらないというときはファイルの文字コードを疑ってみるとよいかもしれません。

Follow me!