• ベストアンサー

完全なセッション破棄をしたい

syuuiwsdの回答

  • syuuiwsd
  • ベストアンサー率56% (17/30)
回答No.1

1、入力画面で入力を受ける 2、それを確認画面に送る 3、確認画面で、送られたものをセッションに入れる という流れでしょうか? 例えば、メール送信後、セッションの廃棄だけでなく、 $_SESSION['ProcessFinished']=true; というセッション変数を設定して、確認画面でこの変数が設定済みかどうかをチャックし、設定済みであればメール送信の代わりに何かメッセージを出力すれば? ご参考まで

noname#102084
質問者

お礼

ご回答ありがとうございます。 処理の流れは、認識していただいている通りです。 アドバイスいただいたように、メール送信後にセッション変数を設定してみました。 たしかに設定済みの場合はメッセージが表示されておりましたので、二重投稿対策としても使えそうですね。 その画面で更にブラウザの戻るや進むをクリックして画面を前後させると、入力画面が表示され、値は入ったままになってしまう時がありましたのでセッションの完全破棄と併用すればより確実なものになるかもしれません。

関連するQ&A

  • 複数ページでセッションを使わず値を保ち続ける方法

    現在セション管理で開発した申込みフォーム(入力画面→確認画面→メール送信→完了画面の4ファイル)を利用しています。 入力値をセッションで管理し、完了画面でセッション破棄をしています。 ただ、困ったことに完了画面では「申込み内容を必ず控えておいてください」として入力された値を表示させていますので、リロードで値が消える今の仕様はあまり好ましくありません。なんとか解消したいのですが、セッションを破棄しない方法はセキュリティ・サーバ負荷的にも少し不安です。 セッションを使わず、値を保持する方法はないでしょうか。 もしくは、セッションを使ってもいいと思われる方がいらっしゃいましたら、理由もそえて教えていただけると大変参考になります。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションの破棄

    いろいろとセッションの破棄を試みているのですがうまくいきません。 最初のページで setcookie("order",session_id()); として数ページこの情報を確認する形でページ遷移させています。 最終ページの処理の末端で session_start(); $_SESSION = array(); if (isset($_COOKIE[session_name()])) {   setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); としています。 ところがセッション情報が消えていないためリロードするとメールが再送信されたり完了ページが表示されたりします。 なぜでしょうか?いろいろな情報を参考にしているのですが上手くいきません。 よろしくお願いします。

    • 締切済み
    • PHP
  • セッションについて

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

    • ベストアンサー
    • PHP
  • インラインフレーム内のセッション

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

    • ベストアンサー
    • PHP
  • セッション使用時のセキュリティについて

    問い合わせフォームをPHPで書いています。 基本的な流れは "1.html"(入力フォーム表示) ↓ "2.php"(入力内容を確認してもらいます) ↓ "3.php"(入力内容を送信します) です。 "1.html" フォームを表示して、入力してもらいます。 POSTでデータを2.phpに渡します。 "2.php" POSTされたデータを表示し、入力内容を確認してもらいます。 入力内容をチェックし、不備が無ければsession_start()し、$_SESSION変数に値を入れます。 "3.php" session_start()し、$_SESSION変数を使用します。 $_SESSION変数を使い終わったら、以下でセッションを破棄します。 $_SESSION=array(); session_destroy(); クライアント側のクッキーを削除します。 setcookie("PHPSESSID", '', time() - 42000, '/'); $_COOKIE=array(); 以上の手続きをしていますが、セキュリティの観点で見直した方が良い点はありますか? "2.php"の時点でセッションを開始していますが、もしその時点で送信(submit)しなければ"3.php"でのセッション削除が実行されない為、セッションとクッキーが残ってしまうと思いますが、どの様な問題が生じますか? アドバイスを宜しくお願いします。

    • ベストアンサー
    • PHP
  • セッションをつかったページについて

    メール送信フォームをPHPで作っています。 入力した値を管理するためにセッションを使っているのですが このページから、他のページに移動する際(リンクをクリック)に URLに http://www.xxxxx.co.jp/dir/?PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx のように表示されてしまいます。 できれば、 http://www.xxxxx.co.jp/dir/ のようにセッションIDは表示しないようにしたいのですが どのようにすればいいのか教えていただけないでしょうか

    • 締切済み
    • PHP
  • 検索フォームのセッション管理について

    PHPを利用して検索フォームから入力された値を取得し、 条件にあった画面を表示しているのですがページを戻る際に警告が出て うまく戻れません。 流れ 1,フォームから値の取得 ⇒  2,送られた値を【$a】で受け取り、セッション変数に代入、条件にあったデータの表示(select * from sample where aaa like【$a】) ⇒  3,もしフォームの値が空でセッション変数に値があれば、セッション変数を【$a】に代入し条件にあったデータの表示 ⇒  4,フォームの値、セッション変数共に空ならセッション変数を削除し、他のページに飛ばす 5,新たにフォームから値が送られた場合は値を上書きする 以下が書いたコードです。 session_start(); if(isset($_POST["test"])){ $a = $_POST["test"]; $_SESSION["test"] = $a; }elseif($_POST["test"] == "" and isset($_SESSION["test"])){ $a = $_SESSION["test"]; }else{  unset( $_SESSION["test"] );  if (isset($_COOKIE["PHPSESSID"])) {   setcookie("PHPSESSID", '', time() - 1800, '/');  }  session_destroy();  header( "Location: /top.html" );  exit(); } 以下で【$a】を使いsql文を組み立て、データを表示しています。 このコードだと前のページに戻る際firefoxでは 【このページを表示するにはフォームデータを再度送信する必要があります。フォームデータを再送信すると以前実行した検索、投稿や注文などの処理が繰り返されます。】 と表示され、IEでも 【警告 : ページの有効期限切れ 要求したページは、フォームで送信された情報を使用して作成されました。このページは、もう利用できません。セキュリティ保護のため、情報は自動的には再送信されません。 情報を再送信し、この Web ページを表示するには、ツール バーの [更新] ボタンをクリックしてください。】 と表示されてしまいます 上記のコードをどのように変更すれば警告をださず行いたいことに記述したようにできるのでしょうか? ご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セッションの破棄

    セッションについて質問です。 $_SESSION['username']を複数ページで使用した後、破棄しようと思うのですが、エラーが出てしまいます。 セッション自体は破棄できていると思うのですが、これはどういったエラーなのでしょうか? ソースコード <?php session_start(); ?> <!DOCTYPE html> <head> <meta charset="utf-8" /> <title>セッション破棄</title> </head> <body> <?php //セッション変数を全て解除 $_SESSION = array(); //セッションクッキーの削除 if (isset($_COOKIE["PHPSESSID"])) { setcookie("PHPSESSID", '', time() - 1800, '/'); } //セッションを破棄する session_destroy(); if(empty($_SESSION['username'])){ echo "<p>セッション終了</p>"; echo "<a href='session.php'>はじめのページへ</a>"; echo "<a href='index.php'>top</a>"; } ?> </body> </html> エラーメッセージ Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php:1) in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 2 Warning: Cannot modify header information - headers already sent by (output started at /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php:1) in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 16 Warning: session_destroy(): Trying to destroy uninitialized session in /home/etdfftytg/etdfftytg.php.xdomain.jp/public_html/session3.php on line 20

    • ベストアンサー
    • PHP
  • PHPで作成したページがMacで動作しない

    タイトルのようなものはあるのでしょうか? というのも、現在運営しているPHPで作成したアンケートフォームについて問い合わせがきました。 アンケートフォームは全てPHPファイルで、入力→確認→メール送信→完了を行っています。 また、入力された値はそれぞれ$_SESSION['hoge']で管理しています。 問い合わせ内容は、入力画面で入力した後確認画面がいくら待っても表示されないというものでした。 とりあえずの対応としてサファリで行ってもらった結果、問題なく登録できたとのことです。 phpはサーバサイドスクリプトなので、ユーザーの使用ブラウザまであまり考慮していなかったのですが、ブラウザによって使えない関数・処理方法などはあるのでしょうか? また、上記のアンケートフォームについて、Macのネスケでだけ使えない理由・対処法についてもアドバイスいただけますでしょうか。

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

    セッションの管理について疑問があって質問させていただきます。 PHPの単一サーバでのセッション管理であれば、$_SESSIONを利用すれば良いと理解しています。 例えば複数のサーバで運用する場合はクッキーを利用するという方向で良いでしょうか?$_SESSIONだとセッションの引き渡しはできないですよね。(?) ただし、お金があってロードバランサーを使った場合はできると理解しています。 複数のサーバで運用する場合、会員登録の機能ではDBと連携して 入力画面でクッキーを発行 setcookie("regist","hogehoge","有効期限を設定"); 確認画面 Cookieの値をDBと通信して確認 登録完了の画面で Cookieの値をDBと通信して確認 会員登録がうまくいっていれば setcookie("regist","","有効期限を巻き戻し"); として重複登録を防ぐ。 こんな感じで良いでしょうか。 間違い、誤解があれば教えてください よろしくお願いします。

    • ベストアンサー
    • PHP