• ベストアンサー

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

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

  • session_start();について

    以下のような処理を行なっております。(a.php~e.php) 入力情報保持のため、セッションを利用しております。 そこで、a.php~d.phpの全てのページの最初に session_start(); を記述しております。 ワーニングで 「Notice [PHP]: A session had already been started - ignoring session_start()」 といった旨のメッセージが出るのですが、サイト内でセッションを利用する場合、 最初(この場合だとa.php)だけに session_start(); を記述すればよいのでしょうか。 セッションを利用するページ全てに記述するという認識でいたのですが・・・ 御教授頂ければと思います。 a.php 情報ページ セッションの開始 b.php 入力情報チェック ↓ c.php 入力情報確認ページ d.php 入力情報登録 セッション破棄 e.php 登録完了ページ 環境 phpバージョン4.3.11 xoopsにて使用

    • 締切済み
    • PHP
  • ★PHP★フォームでセッションクリア、保持する方法

    PHPでフォームを作成しています。 下記2点について教えてください。 流れ:登録画面→確認画面→登録完了 1.確認画面から、登録画面に戻ったときに入力した情報が保持されていない。 2.登録完了から確認画面に戻って、登録した時に同じ情報が登録される。 1の保持の方法 2の同じ内容を登録させない方法(セッションクリア??) を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • php セッション 戻る時に消える

    php セッション 戻る時に消える お世話になっております。 ページ遷移においてデータの受け渡しをセッションを利用して行っております。 「入力ページ」⇒「確認ページ」⇒「完了ページ」 確認ページでpostデータをセッションに格納しております。 そこで質問です。 「入力ページ」⇒「確認ページ」⇒「入力ページ」の場合、確認ページでセッションに格納しているデータを、 入力ページに戻った段階で呼び出すことは可能でしょうか。 そもそも戻った場合はセッションは消去されてしまうのでしょうか。 ちなみに、「入力ページ」はhtmlですが、phpを使用できる状態にしてあります。 色々と検索したのですが私の力不足で該当する内容にめぐり合えませんでした。 お力をお貸しください。

    • 締切済み
    • PHP
  • インラインフレーム内のセッション

    通常のHTMLファイルのインラインフレーム内に、別サーバーからPHPファイルを取得して表示しています。 そのPHP自体は簡単なアンケート(フォーム→入力内容確認→送信)なんですが、このフォーム→入力内容確認の遷移がうまくいきません。 セッションでフォーム内の値と送信ボタンの値(sub)を保持し、確認のファイルに if(@$_SESSION['sub']!=TRUE){ header("location:form.php"); exit(); }else{ (以下略) } と記述することで、もしURL直打ちの場合はフォームの入力画面に飛ばされるようにしてあるのですが、インラインフレームの中でフォームに入力して送信ボタンを押すと、強制的に同じ画面に戻ってしまうのです。 直接ブラウザで該当のPHPを見たときは、何の問題もなく動くので、プログラム自体にエラーがあるわけではないと思うのですが・・・。 どうも確認ファイルのif(@$_SESSION['sub']!=TRUE)で、セッションがうまく保持されていないためにheaderで飛ばされてしまっているらしいのですが、インラインフレーム内でセッションを利用するときはどうすればいいのでしょうか?

    • ベストアンサー
    • PHP
  • SESSIONを使用したユーザ登録を作成しています。

    SESSIONを使用したユーザ登録を作成しています。 フォーム→確認ページ→登録完了という流れのページを作成しています。 ソースは下記のとおりになります。(文字数制限のため、ソースを省略しています。) フォームページ /* form.php */ <?php session_start(); ?> <html> <body> <form action="confirm.php" method="POST"> 名前:<input type="text" name="name" value="<?php echo $_SESSION["name"]; ?>" > <input type="hidden" name="regist" value="<?php echo $regist; ?>" /> <input type="submit" name="confirm" value="確認"> </form> </body> </html> 確認ページ /* confirm.php */ <?php session_start(); $regist = $_POST["regist"]; ?> <html> <body> 名前:<?php echo $name; ?> <form action="complete.php" method="post"> <input type="hidden" name="regist" value="<?php echo $regist; ?>" /> <input type="submit" name="submit" value="登録" /> </form> </body> </html> 登録完了ページ /* complete.php */ <?php session_start(); $regist = $_POST["regist"]; $link = DBNAMEなどの設定 $name = htmlspecialchars($_POST["name"]); $query = "INSERT INTO `user` (`name`) VALUES('$name')"; $result = mysql_query($query, $link); if ($result) { $msg = '登録しました。'; } else { $msg = '登録に失敗しました。'; } ?> <html> <body> <?php echo $msg; ?> </body> </html> としています。 ご質問なのですが、フォーム画面にて名前を入力して、確認画面では名前が表示されるのですが、登録完了では空の値になってデータベースに登録されてしまいます。 たぶん確認画面から登録完了画面への受け渡しができていないのはわかるのですが、記述方法がわかりません。 PHPは初心者のため、おわかりの方がいらっしゃいましたら、ご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • セッションについて

    PHPは勉強してからまだ、日が浅いためどなたかご教示いただけないでしょうか? 現在会員ページの中にフォームを作っています。 会員ページはログイン時にmysqlから会員情報を呼び出し、セッションを使ってページを移動しています。 会員情報の編集などをしたい場合にフォームを使って編集をできるようにしています。 フォーム入力ページ→確認ページ→登録完了ページとなっています。 登録完了になるとデータベースの内容が書き換わる、もしくは追加される。 ここでご質問なのですが、 登録完了ページにてリロードすると、空の値がデータベースに追加されていしまいます。 これを回避する方法はありますでしょうか? 例えば登録完了ページでリロードしたときは不正に入力されているなどの表示や、フォーム画面に戻るなど空の値がデータベースに登録されない方法を探しています。 自分の中ではログイン時に発行されるセッションとは別にフォームはフォームでセッションを与えた方が良いのかと考えています。 どうしたらよいのかわからず困っています。 最適なのがおわかりの方がいらっしゃいましたら、ご教示いただけないでしょうか?

    • ベストアンサー
    • PHP
  • 完全なセッション破棄をしたい

    現在運営中のアンケートフォームを改善したいと思い、質問させていただきます。 現在のアンケートフォームは、入力画面.php→確認画面.php→メール送信.php→完了画面.htmlの4ファイルで構成していて、画面としては3画面です。 また、入力値についてはセッション管理をしています。 メール送信後は、以下の命令でセッション破棄・完了画面.htmlの呼び出しを行っております。 $_SESSION = array(); session_destroy(); header("Location: 完了画面.html"); ところが、セッションが完全に破棄されておりません。 具体的にあげますと、完了画面でブラウザの戻るをクリックして確認画面.phpへ戻り、「ページの有効期限が切れています」と表示されるためリロードを行うと値が入った確認画面が表示されてしまうのです。 ページの有効期限が切れていますうんぬんはかまわないのですが、リロードした時に破棄したはずの値がなぜ表示されてしまうのでしょうか。 また、最終的に求めている「同じ内容が二重送信されないようにする」のために、どのように修正すればよいでしょうか。 アドバイス、お願いいたします。

    • ベストアンサー
    • PHP
  • セッションについて

    PHP初心者です。 今、セッションについて勉強しています。 名前を入力してログインすると次のページに名前が表示するようにしたいのですが、表示されません。どうしたらよいでしょうか? ソース(ログインページ) <? session_start();// セッション管理の開始 session_register("namae1");//現在のセッションに1つ以上の変数を登録する ?> <? header("Content-type: text/html;charset=EUC_JP"); ?> <html><head><title>ログイン</title></head> <form action="sessiontop.php" method="post"> 名前: <input type="text" name="namae"><br><br> <input type="submit" value="ログイン"> </form> </body></html> ソース(名前が表示されるページ) <? session_start();// セッション管理の開始 header("Content-type: text/html;charset=EUC_JP"); //ディレクトリー内に入っているHTMLファイルは全てEUC-JPですという命令がブラウザに送信される。 ?> <html> <head> <title>セッションメインページ</title></head> <? $name = $_POST["namae"]; $_SESSION["s_name"]=$name; ?> <?= $s_name ?>さんこんにちわ<br><br> <a href="session3.php">ログイン画面に戻る</a><br> </body></html> よろしくお願いします。

    • ベストアンサー
    • PHP
  • フォームの構築

    phpで以下のような流れのフォームをつくっています。 基盤となる流れで問合せでも会員登録でもフォームの流れは共通です。 1:入力ページ 2:確認ページ 3:送信完了ページ ※入力ページと確認ページでは、自分自身にPOSTしてます 入力ページで送信ボタンを押すとデータチェック(未入力や妥当性)を行います。 ここでエラーがあればエラーメッセージを各フォームの項目の下に表示しページ移管しません。 エラーがない場合にはPOST値をSESSIONに格納し確認ページへリダイレクトします。 ※確認ページの各項目の表示値はSESSION値を利用 確認ページのボタンは送信ボタンのみで戻るボタンは用意していません。必要であればブラウザの戻るで戻ります。 送信ボタンを押すと送信完了ページへリダイレクトしメール送信等の必要な処理を行います。 いちいちSESSIONを利用しないでPOSTで済ませるべきという意見もあるのですが一般的にどちらがいいのでしょうか? 確かにSESSIONを利用しない場合、処理は楽になる事もあるのですがPOSTした瞬間に ページ移管してしまうので各フォームの下にエラーメッセージの表示はできないですよね? また、hiddenを使う事によって目には見えないもののソース上では見れるので セキュリティ的にもあまりよくないという事もあるのでどちらがいいものか迷っております。 問題なく動作はしているので構築方法についてアドバイスやいい方法がありましたら教えてください!

    • ベストアンサー
    • PHP
  • ログイン中のフォーム確認画面でのsession管理について。

    例えば、ログインの認証機能をPHPのセッションを利用して作るとします。かつ、ログイン中にユーザのプロフィール変更画面等で、入力後、確認画面を出す際、formのhiddenでなく、これもセッションを利用するとします。 このように、一回のリクエスト/レスポンスに二つ以上のセッションが同時に走る場合、どのように管理するのが効率よいでしょうか?

    • ベストアンサー
    • PHP