先日、企業のWebサイトにお客様のサービスシステムが入っていましたが、レンタルスペースでは足りず、ドメイン名(ドメイン名)を統一するために別のサーバーを立ち上げました。他のサーバーのサーバーは元のサーバーと同じです)ドメイン名が違いすぎるため)、フレームワークを使用してこの顧客のシステムを元の Web サイトに組み込みましたが、いくつかの問題が発生しました。クロスドメイン操作により、顧客システムのユーザーがログインした後にセッションが失われるという問題が発生し、私もここに投稿して解決策を求めました。http://bbs.bc-cn。 net/dispbbs.asp ?boardID=10&ID=167628&page=3。さまざまな方法で情報を検索した後、私は独自の分析と実験を通じて最終的にこの問題を解決しました。今日、プログラムを求めている人を見かけたので、みんなに共有するためにこの投稿を書きました。
まず原理を説明します。
システムは各プログラムのスコープを認識します。一般的に、IE はデフォルトでプログラム スコープを設定します。
フレームワークはクロスドメインコンテンツを持っているため、最初はフレームワークプログラム自体のプログラムスコープがデフォルトとなり、フレームワーク内のプログラムスコープを確認することができません。
この IE をフレーム内のプログラム スコープにデフォルト設定するために、複数のジャンプを使用しました。
まず、このフレームから飛び出して、セッション値を必要とするフレームレス Web サイトのページ (サーバー B のページとします) に入り、システムがセッション ID を自動的に生成できるように、このページでセッションを生成してから、元のページに戻ります。システムはこの IE のセッション ID を生成しているため、この IE が閉じられていない限り、システムは常にこの IE がこのプログラムの範囲内にあると認識します。このIDでは生き残ることができます。
これにより、システムを不正行為するという目的が達成されます。
もう 1 つ追加すると、2 番目のジャンプでは別の方法が使用されます。これは、フレームの外側の情報を破棄し、フレーム内の情報を保存する必要があるためです。
ジャンプ方法によっては、ジャンプ前の情報が破棄または保存されます。
プログラムの実装:
ファイル 1:
フレームワーク ファイル:index.htm (サーバー A で実行)
<html>
<頭>
<meta HTTP-EQUIV=Content-Type CONTENT=text/html;
<title>啓豪ドア工業</title>
</head>
<frameset rows=1,* border=0 Frameborder=0>
<フレーム名=winBackLoad スクロール=noresize ターゲット=mainweb1 src=default_top.htm>
<フレーム名=mainweb1 src=http://www.serverB.com/index.asp スクロール=自動>
<フレームなし>
<本文>
<p>このページではフレームが使用されていますが、お使いのブラウザはフレームをサポートしていません。 </p>
</body>
</noframes>
</フレームセット>
</html>
ファイル 2:index.asp (サーバー B で実行、ジャンプしてセッション ID を生成する関数)
<スクリプト>
if (top.location !== self.location) {
トップ.ロケーション=自分.ロケーション;
}
//このJSの目的はフレーム外で実行することです
</script>
<%
if session(xm2)= then
セッション(xm2)=eee
'上記の文の目的は、セッションを使用し、システムにこの IE のセッション ID を生成させ、無限ループの発生を避けるためにジャンプされたかどうかを判断させることです。
%>
<META HTTP-EQUIV=REFRESH CONTENT=0;URL='http://www.serverA.com/index.htm'>
<%
、上の文はフレームに戻ります。注意: 上記のジャンプ方法のみを使用し、次のジャンプ方法は使用しないでください。
それ以外
Response.リダイレクトindex2.asp
'上の文は、サーバー B でプログラムを実行するための実際のジャンプです。注: この方法でのみジャンプできます。
%> の場合に終了
上記のジャンプ後、この IE はすでにサーバー B 上のセッション ID を持っています。つまり、フレームはサーバー A のメイン フレームで実行されていますが、サーバー B 上のセッションが失われないことを保証し、クロスドメインを実現します。操作の目的。