インラインフレーム内のセッションの問題と解決方法

このQ&Aのポイント
  • 通常のHTMLファイルのインラインフレーム内に、別サーバーからPHPファイルを取得して表示しています。しかし、フォームの遷移に問題があります。
  • インラインフレーム内でフォームに入力して送信ボタンを押すと、同じ画面に戻ってしまいます。
  • セッションがうまく保持されていないために、確認ファイルでセッションをチェックしている部分で問題が発生しています。
回答を見る
  • ベストアンサー

インラインフレーム内のセッション

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

  • rusya
  • お礼率56% (167/295)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • wish46
  • ベストアンサー率78% (29/37)
回答No.1

セッションが登録されているかを調べるなら isset($_SESSION["sub"]) を使えばいいかと。

rusya
質問者

お礼

回答ありがとうございます。 ご指摘の通りに書き換えてみましたところ、正常に動作しました! 実は以前issetで記述していたのですが、その時は記述にミスがあったらしく動かなかったので書き換えてしまいました。 これで先に進めます。ありがとうございました。

関連するQ&A

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

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

    • ベストアンサー
    • PHP
  • セッション PHPとHTML

    form1.htmlのaction先にorder.phpを指定し、そのorder.phpで$_POSTを使ってform1.htmlのフォーム情報を取得します。その後、order.phpはheader(Location)でform2.htmlをブラウザ上に表示させます。 form2.htmlはaction先が同じorder.phpになっており、ifで動作を制御しています。form2.htmlのsubmitボタンを押すと、画面上にorder.phpにより、今まで2つのフォームで入力した内容が表示されます(order.phpはsessionですべての変数を保持しています)。 この時「form1の内容を訂正」「form2の内容を訂正」というリンクないしボタンを設けて、該当フォームに飛べるようにしたいのです。 このリンク/ボタンで該当フォームに飛んだ場合、入力内容がフォームに表示されるようにするには、どのようにすればいいのでしょうか? いまいちsessionの詳しい使い方が分からなくて困っています・・・。

    • ベストアンサー
    • PHP
  • session_cache_limiterについて

    お世話になっています。 キャッシュで、悩んでいます。 ログイン(セッションに名前などを登録)  ↓ 入力フォーム(「登録」ボタンを押す)  ↓ 判定(エラーが発生したら、「戻る」ボタンを押してもらい、 入力フォームに戻る。) という、ごくありきたりな、事をやっているのですが、 iniファイルで、session_cache_limiter('nocache') にすると、「戻る」ボタンを押しても、先ほど入力 したデータが全て消えています。 今度は、入力フォームの先頭で、session_cache_limiter("public");を 入れると、確かに、「戻る」ボタンを押しても、先ほど入力したデータが 保持されていますが、この状態で、 session_unset(); session_destroy(); をして、再度、入力フォームに行っても、前回のセッション情報 (前回ログインした、ユーザー名)を保持したままになっています。 セッションの情報のキャッシュは破棄して、入力フォームのデータ はキャッシュしたいのですが何か良い方法は、無いでしょうか? session_cache_limiter("private");にしても、結果は同じです。 環境は、php4.06 apache1.3 です。 よろしくお願い致します。

    • 締切済み
    • PHP
  • アップロードした画像の削除

    フォームから画像をアップロードするものを作っています。 アップロードから画像の表示まではできているのですが 画像の削除の方法について教えてください。 単純に削除であればunlinkでいいのですが入力画面内にての 途中の工程でのいい方法がわからず困っております。。。 必須項目が5つありそのうちファイル選択が1つというのが前提です。 1・フォームからをファイルを選択 ※他の項目は空の状態 2・ファイルが選択されていれば必要なエラーチェックを行い 問題なければ一度でも送信ボタンを押したら他のフォームの値が 空でエラーがあってもファイルデータ保持のためバイナリデータ としセッションで保持した後サーバーにファイルをアップロード ※他のフォームが空なのでエラーとなり確認画面へページ移管は せず再度入力画面を表示 3・バイナリデータをもったセッションがあれば画像表示のため 別のphpファイルを読み込み入力画面中に確認用画像として表示 ※セッションを使用 4・画像表示と一緒に画像削除用のリンクを表示 ※<a href="hoge.php?action=del">削除<a> ※一度でも画像をアップロードすれば削除をクリックしセッション 削除しない限りファイルの選択は無効となる 5・削除をクリックしたら以下のソースでファイルに関しての 必要なセッション削除 if ($_GET['action'] == 'del') { // アップされたファイル削除 @unlink($_SESSION['file']['image_path']); // セッション削除 unset($_SESSION['file']); // 削除後移動 header('Location:' . $_SERVER['SCRIPT_NAME']); exit(); } これで問題なく画像は消えるのですが他のフォームに入力している 値までが削除(初期化?)されてしまいます。 ※header関数を使わなくてもアドレスがhoge.php?action=delと なるだけで結果は同じでした。 希望としては削除をクリックしたらファイルに必要なセッション のみを削除し他の入力されている項目の値残したいのですが どのような方法がありますでしょうか? 他の項目の値はセッションで保持している訳ではないのでheader 関数で移動すれば値も消えていて当然というのはわかるので実現 できる事なのかすらわからない状況です。 わかりづらい質問となってしまい申し訳ございませんが宜しく お願い致します。

    • 締切済み
    • PHP
  • SESSIONの取得タイミングについて

    現在簡単な会員登録のサイトを作っているのですが フォームに入力してもらった値を同じ画面でDBに登録するのではなく、 確認画面を新しく起こしてそこで登録ボタンを押せばDBに書き込むようにしたいのですが上手くいきません。 処理の順番は 1.フォームの確認ボタンを押されると値をSESSIONに登録(PHP)  ↓ 2.確認ボタンで新しいWindowをJavaで起こします  ↓ 3.確認画面でSESSIONの値を確認  ↓ 4.SESSIONの値をDBに登録 としたいのですが どうも2.の処理が1.よりも先に入って確認画面にはSESSIONの値が入っていません。 親WindowではSESSIONの値は入っているのですが。 確認ボタンに値の取得と新しいWindowを開くJavaと2つの機能を持たしていることが原因だろうとは思うのですが、 Windowを開くタイミングを遅らせる等の処理でうまく回す方法はありませんでしょうか? (Javaを使ったのはWindowサイズを変更したかったからです。) ご存知の方おられましたらご教授願えないでしょうか。 よろしくお願いします。 環境 レンタルサーバーにてPHP4+MySQL4

    • 締切済み
    • PHP
  • sessionの使い方

    詳しい方がいましたら、ご教授下さいませ。 ---a.php--- <?php if(!isset($_SESSION['n']) {  session_start();  $_SESSION['n']='1'; } ?> ---------- ---b.php--- <?php session_start(); $_SESSION['n']='2'; ?> ---------- ---c.php--- <?php session_start(); echo($_SESSION['n']); ?> ---------- a.phpで、'1'をセットして保持し、 b.phpが動作したとき、'2'に入れ替えているのですが、 c.phpで確認すると、何故か'1'のままです。 一度セットした値を、入れ替えることって出来ないのでしょうか?

    • ベストアンサー
    • PHP
  • PHP セッション情報のDBへの受け渡し

    お世話になります。 標題の件について、以下のとおり説明します。 (1)1ページ目:入力フォームで入力した情報をセッションに保持 (主にプルダウンメニューの情報とテキスト) submitボタンで次画面へ ↓ (2)2ページ目:サムネイル写真をクリックした情報を保持+インラインフレームで拡大写真表示 (クリックした情報をプルダウンメニューに表示してセッションへ保持) submitボタンで次画面へ ↓ (3)3ページ目:サムネイル写真をクリックした情報を保持+インラインフレームで拡大写真表示 (クリックした情報をプルダウンメニューに表示してセッションへ保持) submitボタンで次画面へ ↓ (4)4ページ目:上記内容の確認画面 submitボタンで次画面へ ↓ (5)送信 現状、上記の流れでセッション情報を保持しつつメールでの送信が確認出来ています。 ですが、ページ遷移で確認画面から前画面へ戻って、例えば2ページ目の写真を変更して、submitで次画面へ遷移すると、3ページ目の情報がなくなり新たに写真を選択する必要になってしまいます。 なので、ページを前後遷移しても情報が保持された状態にするには、どうすれば良いでしょうか? データベースを使わないと出来ないことでしょうか? データベースに関しても勉強しておりますが、セッション情報をDBへ登録して、その後ページを遷移した場合に、データベースから呼び出すようなイメージなのでしょうが、それにはどうすれば良いのかが不明です。 お手数ですが、ご教授の程、よろしくお願いします。

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

    現在モバイルサイトを製作中です。 そこでセッション管理が上手くいかずにとまってしまっています。 a.phpがメールフォームになっており入力した値をb.phpに飛ばしてmb_send_mailにてメールを飛ばしております。 メールを飛ばしたあとにheader("Location:www.a.php");にてa.phpに 戻しているのですが、最初にa.phpに入っていたセッションが引き継がれずに困っております。 どなたかご教授ください。 お願いいたします。

    • ベストアンサー
    • 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を利用して検索フォームから入力された値を取得し、 条件にあった画面を表示しているのですがページを戻る際に警告が出て うまく戻れません。 流れ 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

専門家に質問してみよう