IFRAME内PHPのセッション変数取得が出来ない

このQ&Aのポイント
  • IFRAMEを使用して外部サーバーのPHPを呼び出す際、セッション変数の取得に問題が発生しています。特にInternet Explorer(IE)での動作に不安定さが見られます。
  • 問題が発生しているため、IFRAMEを介さずにPHPファイルを直接呼び出した場合には正常に動作することが確認されています。
  • 解決方法は現状では不明ですが、IFRAMEを使用する際には注意が必要なので、他の開発者からアドバイスを受けることをおすすめします。
回答を見る
  • ベストアンサー

IFRAME内PHPのセッション変数取得が出来ない

既存のHTMLサイトに一部機能追加したいだけ+ブラウザに表示されるURLの関係で、必要部分だけIFRAMEでPHPサーバーのファイルを呼び出して表示させようと考えました。 IFRAMEを記述するHTMLファイル設置サーバーはPHPが使用出来ません。 <iframe src="http://hogehoge/login.php"></iframe> とHTML内にログイン用PHPを表示させ、ボタン押下でログイン判定 →データをセッション変数にセット →header("Location: http://hogehoge/form.php");で画面遷移 →フォーム用PHPに先ほどセットしたセッションデータ表示 とこんな感じの処理がしたいのですが、これがFireFoxだとうまく動くのに、IEだと動いたり動かなかったりします。(動く=開発環境である私のPC、動かない=他全て) ボタン押下で自分自身にPOSTしたデータは正しく受け取って画面遷移まで処理しているのですが、遷移後のページでセッション取得しようとすると取得出来ないようなのです。 IFRAMEを通さず直接URL叩いた場合は、FF・IEどちらも正常に動いています。 session_name('hoge'); session_start(); はPHP先頭に記載してあります。 IFRAMEを使用して外部サーバーのPHPを使用する際に、気をつけねばならない事などがあるのでしょうか… もし解決方法に思い当たる方がいらっしゃいましたら、どうかご回答宜しくお願いいたします。 またもし補足等必要でしたらご指摘下さい。

  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

iframeもframeも、外枠ファイルのサーバーと内部ページのサーバーが違う場合に、セキュリティ的に問題となることがあります、 ブラウザのurl欄には、外枠のurlしか表示されないので、悪質サイトのページ表示などされても解らない事があるので、そういったページは表示しない、クッキーなどは受け付けない方向になってきているようです。 ブラウザのセキュリティ設定を確認してみて下さい。 今後の方向としては、「iframe内に別サーバーページを表示してそこからログイン」は、セキュリティ的にブロックされやすくなると思いますので、ログインページへのリンクをおいて、全体のurlをそのサーバーへ移動してからログインするのが確実でしょう。

Kusuki
質問者

お礼

悪質サイト対策で…なるほど! 私のPCでのみ動いていたのは、ブラウザのセキュリティ設定が低めに設定されているせいだったのか…原因判明でスッキリです。 セキュリティ上の制限ではもうどうしようもないので、hrm_mmmさんのおっしゃるように、ログインページへのリンクを置いて対処するようにしたいと思います。 回答ありがとうございました! (お礼が遅くなってしまい申し訳ありません!)

関連するQ&A

  • [PHP]セッション破棄について

    はじめまして。 phpを始めて1週間の初心者です。 現在、ホームページでログイン処理とログアウト処理をphpのセッションを使って作成しています。 今回質問させて頂くのはログアウト処理についてです。 ログアウト処理をでセッションを破棄する際に http://oshiete1.goo.ne.jp/qa3224862.html を参考にして下記の処理を行わせています。 -------------------- logout01.php -------------------- <?php session_start(); $_SESSION = array(); if(isset($_COOKIE[session_name()])){setcookie(session_name(),'',time()-4200,'/');} session_destroy(); header("location: http://~トップページのURL~/"); ?> -------------------- 確認をしたところ、ログインしたユーザの情報は削除されているようでした。 また、http://oshiete1.goo.ne.jp/qa3224862.htmlを参考に下記のようなログアウト処理も行わせてみました。 -------------------- logout02.php -------------------- <?php session_start(); unset($_SESSION['access']); header("location: http://~トップページのURL~/"); ?> -------------------- 同じく確認したところ、ログインしたユーザ情報は削除されているようでした。 -------------------- 環境 -------------------- <サーバ> 【OS】 windows XP(テスト環境)、CentOS 5.2(公開環境) 【PHP】 5.2.6 【Apache】 2.2 <クライアント> 【OS】 windows XP 【ブラウザ】 Firefox 3.0.8 IE 7 -------------------- -------------------- 質問 -------------------- (1)logout01.phpとlogout02.phpの違いは何でしょうか。 (2)「unset($_SESSION);」は使用すると「$_SESSION」が使えなくなるとのことですが、  それはphpを再インストールしない限りは使えなくなるということでしょうか。  それとも、ブラウザを再起動すれば使えるという意味でしょうか。 (3)「unset($_SESSION);」と「unset($_SESSION['access']);」では何が違うのでしょうか。 (3)セッションを使用するとサーバ側にセッションIDを保存したファイルが保存され、  クッキーがクライアント側に保存されるとのことですが、logout01.phpとlogout02.phpを  実行した場合、サーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 (4)セッションの有効期限を指定していないため、logout01.phpとlogout02.phpを実行せずに  ブラウザを終了させた時もログインしたユーザ情報は削除されているようでしたが、  この場合もサーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 初歩的な質問で申し訳御座いませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションが引き継げません

    PHP5.3 + Apache2.2 Windowsです。 IE7でページ遷移を行うと、セッションが引き継げず、新しいセッションが作成されてしまいます。(Chromeでは引き継げます) セッション保存フォルダに新しいセッションファイルが生成されていました。 以下ソースコードです。 $_SESSION['hogehoge'] = 'xxxx'; header("Location:sapmle.php"); sapmle.phpで$_SESSION['hogehoge']を参照すると、エラーになる。 エラー内容:Notice Undefined Index 'hogehoge' また、<a href="sample.php">次のページ</a> と記述したリンクをクリックしても同じエラーになります。 php.ini の use_trans_sid を Onにすると、エラーは出ません。 use_only_cookies を OnしてもOffにしてもエラーは出ました。 use_trans_sid が Offでも header("Location:sapmle.php?" . session_name() . "=" . session_id()); と書くとエラーは出ません。 エラーが出なくなれば良いので、use_trans_sid を Onにしたり、URLにセッションIDを付与すれば良いのかもしれませんが、 これらの処置はセキュリティ上良くないと聞いたことがあるので、どうするのがいいのかわかりません。 わかる人教えてください。よろしくお願いします。

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

    XAMPPのローカル環境でphpのプログラムを組んだのですが、いざ実際のサーバーにアップロード してもうまく動きませんん。 調べた結果セッションがちゃんと動いていないという結論に達しました。 単純なセッションなのですが、ローカル環境ですとちゃんと動くのが、サーバーにアップすると $_SESSION['sa']が空っぽの状態となります。 サーバーにアップロードしたindex.phpの中にecho $_SESSION['sa'];と書き込むと 「あいうえお」とちゃんと表示されますのでセッションには格納されているようなのですが 値をきちんとセッションで持ち越せないようです・・。 ローカルでは下記のファイルはちゃんと持ち越せていて、実際のサーバーではダメな理由がまったくわかりません。 何か特別な設定が必要なのでしょうか?何時間もググっていますがそういった設定が必要と いう記述は見当たらないのですが・・。 サーバーはさくらサーバーでバージョンはPHP 5.4.22となっています。 ------------------------------------------------------------ ファイル名 index.php <?php session_start(); $data="あいうえお" $_SESSION['sa']=$data; ?> <a href="aaa.php">aaa.phpへのリンク</a> ------------------------------------------------ ファイル名aaa.php ------------------------------------------------ <?php session_start(); $sss = $_SESSION['sa']; echo $sss ; ?> ------------------------------------------------

    • ベストアンサー
    • PHP
  • iframeでhatenaを読み込むとページ遷移

    以下のurlをiframeで読み込むと、IE6、IE7でページ遷移してしまいます。(一度iframeとして表示された直後) http://b.hatena.ne.jp/entry/panel/?url=http://hoge.com/ <html> <body> <iframe src="http://b.hatena.ne.jp/entry/panel/?url=http://hoge.com/"></iframe> </body> </html> 他のブラウザのように、ページ遷移せずに、iframeとしてその場で表示させるにはどのようにすればよいでしょうか?また、なぜこのような現象がおきるのかも教えて頂けると幸いです。

  • PHP SESSION 設定について

    PHP(レンタルサーバー:5.3.6)(ローカル:5.3.26)を使用しています。 簡単なログインフォームを作っていました。 ローカルでテスト運用したところ、問題なく動作していたのでレンタルサーバーにアップロードしたところ、SESSIONが動いていない(?継承していない?)ことに気づきました。 そこでphpinfoを確認すると レンタルサーバーは、 session.cookie_httponly=1(On) session.cookie_secure=1(On) になっていました。XSS攻撃に全部ではないけどレンタルサーバーの設定だと有効だということなので、ローカルもレンタルサーバーの設定に合わせたいと思っています。 ※設定をoffにすると問題なく動作します。 sample2.phpで、「$_SESSION['sample_title']」が表示されなくなってしまいました。 どのようにすれば、sessionが正しく動作するかご教授お願いいたします。 抜粋スクリプト ■sample1.php session_start(); session_regenerate_id(TRUE); $_SESSION["sample_title"] = "PHPのSESSION"; //セッション登録 echo "$_SESSION['sample_title']に代入した値は「<?php echo $_SESSION['sample_title'] ?>」です。"; echo "<a href = 'sample2.php'>次のページ</a>"; ■sample2.php session_start(); session_regenerate_id(TRUE); echo "受け取ったセッション変数の値は「".$_SESSION['sample_title'] ."」です。";

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

    現在PHPでの開発を行っております。 環境は、PHP4.0.5、サーバはレンタルでFreeBSDです。 セッションに格納する変数について教えていただきたいと思っております。 セッションに変数をセットする際に、session_registerを使用しているのですが、格納される変数の型はどこで指定するのでしょうか。 例えば、今、セッション変数として、$no="001"をsession_register("no")として、格納しているのですが、 session_registerで値を取得しようとすると、「1」が返ってきます。 セッション変数に格納した時点で、どうやら数値に変換されているようなのですが、文字列として格納することはできないのでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • phpのセッションについて質問です

    現在、phpのセッションについて学習しています。 開発環境はxamppでMySQLデータベースにPDOで接続しています。 セッションについていくつか質問があります。 セッションを使った認証の流れですが、 ログインフォーム画面で、session_start()し、ログインの認証が成功したらsession_regenerate_idで新しいセッションを発行⇒ログインが必要な画面でセッションの有無を確認 という流れで良いのでしょうか? セッションハイジャック対策にsession_regenerate_idをするようですが、 これは全てのページで毎回行ったほうが良いのでしょうか? セッションIDの受け渡しはcookieに保存する方法とURLに含む方法があり、 セッションハイジャック対策について記述しているサイトではcookieが推奨されている雰囲気ですが、 PHPマニュアル(http://php.net/manual/ja/session.idpassing.php)では信頼性がないとあります。 どちらを使うのが良いのでしょうか? セッションの有無のチェックはsession_start()を記述するだけでサーバーが行ってくれるのでしょうか? $SESSIONにセッションIDを保存してissetで調べるといった記述が必要なのでしょうか? メールアドレスとパスワードでのログイン認証を実装したいのですが、 その場合、マイページでユーザー情報を表示したい際、ログイン時に入力したメールアドレスを$SESSION[email]に格納し、マイページのphpプログラムにて、$SESSION[email]に格納されたメールアドレスを検索条件にしてSELECTで他の情報を取得したら良いのでしょうか? メールアドレスを$SESSION変数で受け渡しするのはセキュリティ上危険でしょうか?(危険であれば内部管理用のユーザーIDを$SESSIONに格納してデータを取得しようと思います。) 基本的なセッションの知識がないため、質問の数が多くなってしまいましたが、 答えられる範囲で良いのでご回答頂けると有難いです。

    • ベストアンサー
    • PHP
  • PHPでpaypal支払後のセッション引き継ぎ

    phpでpaypal支払い機能を入れたサイトを作っています。(仮にURLをaaa.com) login.phpでログイン処理をし、ログインした状態でTOPページや購入ページへ遷移した場合は セッションが引き継がれています。 その状態で、paypalによる支払いを行いIPNによる通知をaaa.comの phpファイルで受信しています。 が、そのphpファイルでsession_start()を記述しているのですが、 ログイン状態のセッションが引き継がれません。 なにがしたいかというと、paypalからのIPN通知を受けて、支払完了なら セッション情報をもとにDBに支払完了である事を書きこみたいと思っています。 このようなシーンの場合は引き継げないのでしょうか? それとも引き継ぐ方法があるのでしょうか? もしあるのならぜひ教えて下さい。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 画面遷移でセッション切れになります

    いつもお世話になっております。 サーブレットを使用した画面遷移で jsp(ログイン)→servlet(ログイン確認)→jsp(メニュー) →servlet(データ取得)→jsp(データ一覧表示) という流れで画面遷移を行っていたのですが、 二つ目のjsp(メニュー)まではセッションが残っているのですが 次のservletに遷移した瞬間セッションがが切れてしまいnullを検出してしまいます。 はじめのservlet(ログイン確認)にて getAttributeを使用しセッションを残していたのですが、 セッション切れの原因がわかりません。 セッション切れする原因はなんなのでしょうか。 皆様の知恵をお借りできれば幸いです。

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

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

    • 締切済み
    • PHP

専門家に質問してみよう