dポイントプレゼントキャンペーン実施中!

PHPでsession_start();とした後のフォームで、その後にフォームで入力したデータをPOSTで送って確認画面を表示したとします。

ここで、最初のsession_start();がなければ、ブラウザの戻るボタンで前のフォーム入力画面へと戻っても、入力したデータは保存されたままですが、session_start();とした後では、入力したデータが全てクリアされてしまうようです。

ちょっと修正したい時に、すべてクリアされてしまうとかなり不便なのですが、何かよい方法はないものでしょうか?セッション変数にPOSTするデータを保存する以外で方法はないものでしょうか?

A 回答 (2件)

session_startでフォームデータが消えるのは、PHPのセッションで


キャッシュ設定がno-cacheになっているせいだと思います。

php.ini, .htaccess, ini_set()で下記を設定するか、
session.cache_limiter
session.cache_expire

または、プログラム中でsession_start()より前に
session_cache_expire( 指定時間(分) ) ;
session_cache_limiter('private_no_expire') ;

関数を呼ぶことで、解決すると思います。

上記を設定するとhttpヘッダにキャッシュコントロールを追加して
クライアントに投げます。
よって、ブラウザの戻るボタンで戻った場合、
サーバにアクセスが発生しないので、
入力画面において入力フォーム以外の部分の情報も更新されませんので、
注意してください。

やっぱりセッションから引っ張る方がベストですが、
メールフォームやBBSなど重要なデータを扱わなかったり、
単純なものにはキャッシュコントロールの方が便利といえば、便利です。

もちろん、フォームにデータが残るので、
二重送信対策とかもしておいた方がいいですね。

参考URL:http://www.php.net/manual/ja/ref.session.php
    • good
    • 0
この回答へのお礼

ありがとうございました。

session_cache_limiter('private_no_expire');
の文の追加で解決しました。

また何かありましたら、よろしくお願いします。

お礼日時:2005/07/11 15:33

ブラウザの戻るボタンを使わせないで、FORMに「戻る」ボタンをつける。

    • good
    • 0

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