先日、PHPの案件で奇妙な現象に遭遇した。
カート情報をセッション変数に持つフルスクラッチのECサイトで、下記のような遷移フローの中で問題が起きた。
- カート画面
- 注文者情報・お支払情報入力画面
- 入力内容確認画面
フロー中、2の入力画面に遷移すると、1のカート画面で保存されたセッション変数がNullになってしまうのだ。
この問題でよくあるのがsession_start()関数の書き忘れだが、正しく記述されている。
この他、あらゆる原因を考えてみたが答えにたどり着かず、長時間この問題に悩まされた。
こんなところに原因が!?
色々とコードを触っていると、ひょんなことから問題の解決に至った。
<?php
session_start();
// Code...
元のコードのPHP開始タグの前に2行の改行があったのだが、この改行を削除することでセッション変数がNullになる問題が解消された。
<?php
session_start();
// Code...
こちらは前任者から引き継いだファイルで、本番環境で動いていたのでこれまで特に気にしなかったのだが、devサブドメインを当てたステージング環境でだけこの問題が起きた。
詳しい原因はわからないが、この記事が同じ問題で悩まされているプログラマーの一助になることを願う。