• ベストアンサー

header(Location:~)で$_SESSION[" "]が保持されない。

自宅サーバー(apache2+php5+mysql5)のlocalhost環境で、 header(Lcation:~)の記述をすると、 セッションが保持されない現象が起きています。 本番環境のレンタルサーバーは、同じ記述で、 しっかりとセッションが保持されます。 この原因は、何でしょうか? php.iniの設定など、何か考えられることがあれば、 是非教えて下さい。 【やりたいこと】 ■a.php **************************************** <?php echo<<<EOD <form method="POST" action="./b.php"> <INPUT type="text" name="test"> <INPUT type="submit" name="Submit" value="確認画面へ"> </form> EOD; ?> ■b.php **************************************** <?php $_SESSION["test"]=$_POST["test"]; header("Location:./c.php"); ?> ■c.php **************************************** <?php echo $_SESSION["test"]; ?> 自宅サーバーだと、 a.phpで入れたデータが、c.phpで表示されません。 レンタルサーバーだと、 セッションが保持され、表示されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

php.iniのsession.cookie_path設定が異なっていたとかはないですか? ページによって再設定していたりすると、'/' と '' では異なるcookie として保存されるので、session id も異なって発行されます。 ブラウザに保存されたcookie情報も確認してみるとよいでしょう。 私も先日、このpath設定をいじってて、「sessionが保存されてない?」「消したのに残ってる?」という状況に遭遇しました。

kurouz
質問者

お礼

hrm_mmm様 できました!!!! ありがとうございます!! おっしゃる通り、 session.cookie_pathが異なっていました。 しっかりphpのtmpがある場所に設定した所、 見事に動きました。 localhost環境でテストを行なうのに、 絶対的に必要になるものだったので、 本当に助かりました。 ご多忙の中、貴重なアドバイスをありがとうございます!!

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

c.phpを <?php session_start(); print_r( $_SESSION); print_r($_COOKIE); ?> としてみて、クッキーがほんとうに参照されているか、 セッション変数が別のものが指定されていないかなど デバッグしてみては?

kurouz
質問者

お礼

なるほど、 そういったテストも必要ですね。 既に問題は解決しましたが、 次回から行なってみます。 お忙しい中、時間を割いて頂いて、 本当にありがとうございます。

回答No.2

そうしますと php.ini の session.use_cookies の項目は 1 になっていますでしょうか? またブラウザの cookie は有効になっているかお確かめください。

kurouz
質問者

お礼

ありがとうございます。 php.ini の session.use_cookies の項目は 1 になっています。 cookieも有効です。 原因が全く不明ですね・・・。

回答No.1

以下のように処理を開始する前に session_start(); を入れてみてください。 ■b.php **************************************** <?php session_start(); $_SESSION["test"]=$_POST["test"]; header("Location:./c.php"); ?> ■c.php **************************************** <?php session_start(); echo $_SESSION["test"]; ?> これでうまくいくようでしたらおそらく php.ini の session.auto_start の値が 0 に なっていますので 1 に変更してください。 これで session_start(); を入れなくても毎回実行されるようになります。

kurouz
質問者

お礼

saintandre様 ご回答ありがとうございます。 やってみましたが、できませんでした。 session_start();は、 上記例文には入れてませんでしたが、 通常のファイルには、 session_start(); session_regenerate_id(true); という形で入れています。 (記述が足りずに、申し訳ありません) session.auto_startは、 セキュリティ上、0にしておりますが、 1に変えても、変化はありませんでした。 尚、b.phpまでは、セッションが保持されていますので、 locationに問題があると思っていますが、 原因がわかりません。 お手数おかけしますが、 もしおわかりでしたら、宜しくお願いします。