現象
以下のようにPHPのheader関数でページで遷移していたのですが、なぜか遷移先でセッションが消えてしまっていました。
$_SESSION["id"]=$id;
header("Location:"https://hoge.com");
解決した方法
下記のようにheader関数のあとにexitを置くことで解決しました。
$_SESSION["id"]=$id;
header("Location:https://hoge.com");
exit();
仕組み
headr関数で遷移するとSessionが消えるというわけではなさそうです。(PHPのマニュアルでも見つけられませんでした。)
ただし、header(“Location:~ で遷移しても、それ以降に処理があると実行されるようです。
自分の場合はコントローラで、ある条件の時にheader関数で遷移、それ以外はデフォルトのviewをincludeするという作りにしており、そのviewでSessionクリアしていたため、header関数の遷移先で、セットしたはずのセッションが空になっていたようです。単純化して書くと下記のようなことをしてしまっていました。
$_SESSION["id"]=$id;
header("Location:https://hoge.com");
.
.
.
unset($_SESSION["id"]);
直感的には、ページ遷移するのだから処理はそこで終わると思ってしまいがちな気はします。
hrader関数で遷移する際は必ず、exitつけるぐらい勢いでもいいかもしれませんね。
以上です!
コメント