• ベストアンサー

セッションを利用するとフォームがクリアされる

PHP 4.0.6 を使って HTML の FORMタグ を利用して、 登録ページ -> 確認ページ -> 登録完了 というようなページを作るとき、 登録ページでセッションを使っています。 すると、確認ページからブラウザの「戻る」を押すと、 入力した内容が全て初期化されてしまいます。 これでは、閲覧者が何度も入力しなければいけないので、困っています。 そこで質問なのですが、 これは、なぜセッションを使うとなるのでしょうか? また、これに対する何かよい解決方法はないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.3

>>解放するのは、登録すると同時では駄目なのですか? >細かい話なのですが、 >確認ページまで行って、閲覧者の気が変わり、別のサイト >に行ったとします。 なるほど・・・これも又JavaScriptがOffだったら駄目なのですが、ページを移動するとJavaScript側でsession_destroy() or unset()を発行するようにすればいいかも・・・ または、登録ページでREFERERを取得し、自ドメイン(又はこれを登録する上で妥当なページ)意外からのアクセスの場合のみ、session_destroy()等を発行する手も・・・ まあ、小技ですが(^^; >たとえば、このgooのサイトで、・・・・ >(comit) (FORMタグだけで)これができます。 なるほど、やっとやりたいことの意味が分かりました(^^) php.iniで session.cache_limiter= nocache となっていませんか? これを session.cache_limiter = private に変えればやりたいことが出来ると思いますよ。 では

clavia
質問者

お礼

ご回答、ありがとうございます。 > session.cache_limiter = private なりました!!ありがとうございました。 勉強になりました。 ところで、この値の違いがいまいちわからないですが、 それは、また勉強してそれでも、わからなかったら、 ここにまた投稿してみようと思います。

その他の回答 (2)

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

>この方法は少し考えたのですが、これだと、セッション変 >数をいつ解放するのかという問題がないでしょうか? 解放するのは、登録すると同時では駄目なのですか? >なぜセッション?ではなく、なぜセッションを使った場合 >だけ、フォームがクリアされるのかがわからないのです。 ああなるほど(^^;私の読み間違えでした。 で、「セッションを使った場合だけ」と言うのが分かりません。セッションを使わなければ、クリアされないのですか? もしそうであれば、それはブラウザ依存だと思います。 PHPプログラム側では、クリアされていると思いますよ。 更に、セッションを使ったときにクリアされる言われますが、どのようなコードを書かれているのでしょうか? 通常は先ほど私が書いたやり方が一般的だと思いますよ。

clavia
質問者

お礼

ご回答、ありがとうございます。 >解放するのは、登録すると同時では駄目なのですか? 細かい話なのですが、 確認ページまで行って、閲覧者の気が変わり、別のサイトに行ったとします。 で、また登録ページに戻ってくると、まだ変数が解放されていないので、先ほど入力した内容が残ってしまいますよね? できれば、この時は、初期化(クリア)したいのです。 もちろん、フラグなどをもうければ良いのですが、、、 >セッションを使わなければ、クリアされないのですか? ならないようです。たとえば、このgooのサイトで、入力して決定して、次のページに行った時、「戻る」を押すと、入力ページに戻って、そこに先ほど入力した内容が入っていて、編集ができますよね?セッションがなければ、何も書かなくても(FORMタグだけで)これができます。 >どのようなコードを書かれているのでしょうか? コードはおおよそ以下のように書いています。 ---登録ページ--- session_start(); session_register($id, $pass); //他のページからID,PASSを持ってまわる //$id,$pass でユーザー確認、OK なら以下を表示   :   : <form action=kakunin.php<?=SID?> method=post> <input type=text name=comment> <input type=submit> </form> ---確認ページ--- session_start(); session_register($id, $pass); //他のページからID,PASSを持ってまわる //$id,$pass でユーザー確認、OK なら以下を表示   :   : 長くなってすみません。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

---登録ページ--- session_start(); $hoge=$HTTP_SESSION_VARS[hoge];   :   : <form action=kakunin.php method=post> <input type=text name=hoge value="$hoge"> <input type=submit value=go> </form> ---確認ページ--- $hoge=$HTTP_POST_VARS[hoge]; session_register("hoge"); こんな感じでいかがでしょうか? >これは、なぜセッションを使うとなるのでしょうか? >また、これに対する何かよい解決方法はないでしょうか? ここはよく意味が分かりません。 なぜ使うかと言えば、「ユーザーが何度も入力しなくても言いようにするため」であり、 対処法は「セッション管理すること」となります。 私が思うによくセッションというものを理解していないのではないですか?方向性は間違っていませんよ。 頑張ってください。

clavia
質問者

お礼

ご回答、ありがとうございます。 この方法は少し考えたのですが、これだと、セッション変数をいつ解放するのかという問題がないでしょうか? > >これは、なぜセッションを使うとなるのでしょうか? についてですが、なぜセッション?ではなく、なぜセッションを使った場合だけ、フォームがクリアされるのかがわからないのです。

関連するQ&A