アプリ版:「スタンプのみでお礼する」機能のリリースについて

自宅サーバー(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で表示されません。

レンタルサーバーだと、
セッションが保持され、表示されます。

A 回答 (4件)

c.phpを



<?php
session_start();
print_r( $_SESSION);
print_r($_COOKIE);
?>

としてみて、クッキーがほんとうに参照されているか、
セッション変数が別のものが指定されていないかなど
デバッグしてみては?
    • good
    • 0
この回答へのお礼

なるほど、
そういったテストも必要ですね。

既に問題は解決しましたが、
次回から行なってみます。

お忙しい中、時間を割いて頂いて、
本当にありがとうございます。

お礼日時:2008/08/16 14:18

php.iniのsession.cookie_path設定が異なっていたとかはないですか?


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

hrm_mmm様

できました!!!!
ありがとうございます!!

おっしゃる通り、
session.cookie_pathが異なっていました。
しっかりphpのtmpがある場所に設定した所、
見事に動きました。

localhost環境でテストを行なうのに、
絶対的に必要になるものだったので、
本当に助かりました。

ご多忙の中、貴重なアドバイスをありがとうございます!!

お礼日時:2008/08/16 14:16

そうしますと php.ini の session.use_cookies の項目は 1 になっていますでしょうか?


またブラウザの cookie は有効になっているかお確かめください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

php.ini の session.use_cookies の項目は 1 になっています。
cookieも有効です。

原因が全く不明ですね・・・。

お礼日時:2008/08/15 14:47

以下のように処理を開始する前に 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(); を入れなくても毎回実行されるようになります。
    • good
    • 0
この回答へのお礼

saintandre様

ご回答ありがとうございます。
やってみましたが、できませんでした。

session_start();は、
上記例文には入れてませんでしたが、
通常のファイルには、
session_start();
session_regenerate_id(true);
という形で入れています。
(記述が足りずに、申し訳ありません)

session.auto_startは、
セキュリティ上、0にしておりますが、
1に変えても、変化はありませんでした。

尚、b.phpまでは、セッションが保持されていますので、
locationに問題があると思っていますが、
原因がわかりません。

お手数おかけしますが、
もしおわかりでしたら、宜しくお願いします。

お礼日時:2008/08/15 13:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!