ホームページ  >  記事  >  バックエンド開発  >  IE_PHP チュートリアルでのクロスドメイン PHP iframe によって引き起こされるセッション損失の問題の解決策

IE_PHP チュートリアルでのクロスドメイン PHP iframe によって引き起こされるセッション損失の問題の解決策

WBOY
WBOYオリジナル
2016-07-13 10:36:251008ブラウズ

他のWebサイトによってログインページがiframeに埋め込まれると、ログインできなくなります(この状況はIEのみに存在します)。主な問題は、セッションを保存できないことです。以下に私個人の解決プロセスを共有します。 今日作成したログインページが別のWebサイトによってiframeに埋め込まれてしまい、ログインできなくなりました(IEのみで発生しました)。

当然、セッションは保存できません。しかし、アドレスバーでログインページを直接開くと、すべてが正常です。おかしいですね。

オンラインで検索しました。多くの人がこの問題について言及していることがわかりました。最後の解決策は、ログイン ページに次のコードを追加することです:
コードは以下のように表示されます。

リーリー

おそらくこの問題は、ログイン ページが JavaScript のロケーション ジャンプを使用していることにも関係していると思われます。しかし、詳細なテスト研究はありません。

詳しい読み方:
今日、Tencent Friends アプリケーションの作業をしていたときに、テスターから、アプリケーションが IE7 で使用できないという作業指示が届きました

最初の反応は、セッションが失われたということでした

そこで、IE7 の iframe セッション損失の問題をオンラインで検索したところ、次の記事を見つけて問題を解決しました。
昨日、キャンパス内で作成していたタイムダイアリーがついにオンラインになりました。リリース初日には 80 人を超えるユーザーがこのアプリをインストールしましたが、多くのユーザーがアプリを利用できないと報告しました。私はFirefoxで開発していました(学校関係者も復習にFirefoxを使っていたようです) IE7でテストしたところ、ホームページ以外のページが正常に開けませんでした。

インターネットで多くの情報を検索した結果、IE7 にはこのような問題があることがわかりました。ページ内に 1 つ以上の iframe サブページがある場合、サブページでのセッションの作成が成功しない可能性があるため、セッション データを作成できません。他のページと通信できます。学内や 51 のアプリケーションを開発する場合、iframe を使用することを前提とすると、このような問題に遭遇する可能性があります。そして、この問題は IE7 ブラウザーでのみ発生します。Firefox、IE6、Chrome ブラウザーでテストしましたが、問題はありませんでした。

解決策は、session_start を実行する前に、iframe サブページがセッションを作成するときに問題が発生しないように、ブラウザーにセキュリティ レベルを大まかに宣言する次の文をプログラム (PHP 言語を例として挙げます) に追加することです。
header('P3P: CP=”ALL ADM DEV PSAi COM OUR OTRo STP IND ONL”‘);
さらに、your_domain.yourhost.com のように、第 2 レベルのドメイン名にアンダースコアが含まれている場合、セッションの確立と送信時に問題が発生する可能性があることもわかりました。

いくつかの考え:

1) 何年も経った今でも、ブラウザの互換性の問題は完全に解決されておらず、IE ブラウザは依然として開発者に苦痛と苦痛を与えています。
2) アプリケーションをリリースする前に、厳密なブラウザ互換性テストを受ける必要があります。そうしないと、アプリケーションの最初のユーザーが失われる可能性があります。

その他の参考記事:

iframe での jsessionid の失敗によるセッション損失の問題を解決します
http://618119.com/archives/2007/12/19/48.html

ISMP2.1.1インターフェースを実装するにはSsoが必要ですが、ISMPで定義されているインターフェースではiframeなどの埋め込みページでssoインターフェースを呼び出す必要があることが実際に開発中に判明しました。

問題を再現するシナリオは次のとおりです:

1. まずサイトにアクセスします: http://192.168.18.2/test.jsp

test.jsp のコードは次のとおりです:

セッション--www.jbxue.com

sso.jsp で渡された ssoinfo を読み取り、ISMP 認証インターフェイスを逆に呼び出します。

セッションを生成し、指定された属性値を設定します。 session .setAttribute("ssoUser","lizongbo"); その後、ページは http://192.168.18.3/iframe.jsp にリダイレクトされます

応答.sendRedirect(“/iframe.jsp”);
iframe.jsp でセッション中の ssoUser の属性値を読み込むと、読み込めないことがわかります。
2. 最初にページ 192.168.18.3 にアクセスし、次にページ 192.168.18.2 にアクセスすると、この時点で埋め込まれた iframe は生成された jsessionid Cookie を渡すことができます。
したがって、解決策は次のとおりです:

a. URL に jsessionid を追加します。
たとえば、response.sendRedirect(“/iframe.jsp;jsessionid =lizongbo”); にリダイレクトします。 この場合、iframe.jsp ページ内の他の接続の URL が jsessionid を追加しない場合、

セッションを渡し続けることも不可能ですが、クライアント側で各ハイパーコネクションの href 属性が js を通じて書き換えられ追加されます

b.sso.jspにP3Pヘッダー情報を設定する
例: P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”
または P3P:CP=”CAO PSA OUR”
Java コードは次のとおりです:
response.addHeader("P3P","/"CAO PSA OUR/"");

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/739136.html技術記事ログイン ページが別の Web サイトの iframe に埋め込まれると、ログインできなくなります (この状況は IE にのみ存在します)。主な問題は、セッションを保存できないことです。これが私の個人的な解決策です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。