Cookie のクロスドメイン操作は、指定した Web サイトのルート ドメイン名として Domain 属性を指定するだけなので、簡単な問題のように見えますが、実際の使用中にいくつかの問題に遭遇しました。これは確かに注目に値します
。
www メイン ドメイン名の Cookie の下に作成し、次のような Domain 属性を書き込みます (デバッグの便宜上、以下のコードはすべて ASP コードです)
Write.asp
プログラムコード
<%
Response.Cookies(CookieName)("ユーザー名") = "SunBird"
Response.Cookies(CookieName)("パスワード") = "xyz1234"
Response.Cookies(CookieName).Domain = "xxxx.com"
%>
Read.asp
が同じディレクトリに配置されます。
プログラムコード
<%
Response.Write Request.Cookies(CookieName)("ユーザー名")
Response.Write Request.Cookies(Cookie名)("パスワード")
%>
次に、上記と同じコードを使用して、Read.asp ドキュメントを別のサブドメイン サイトに配置します。最後に、Cookie をクリアする別の Clear.asp を作成し、メイン ドメイン名
Clear.asp
の下に配置します。
プログラムコード
<%
Response.Cookies(CookieName)("ユーザー名") = ""
Response.Cookies(CookieName)("パスワード") = ""
Response.Cookies(CookieName).Domain = "xxxx.com"
%>
これで、次の実行シーケンスを通じてテストできるようになります。Write.asp --> メイン ドメイン名の Read.asp --> サブドメイン名の Read.asp ページは、によって作成された Cookie の値を読み取ることができます。 Write.asp を実行してクリアします。すべて問題ありません。http: //bizhi.downcodes.com/ は問題ないようです。
しかし、この方法を実際の現場に適用するには問題があります。
問題の説明:
初めてログインするときはすべて問題ありませんが、どのサブドメイン名でもメイン ドメイン名に保存されている Cookie にアクセスできますが、ログアウトするとサブドメイン名の Cookie はクリアされますが、メイン ドメインの Cookie はクリアされます。メイン ドメイン名は引き続き保持されます。Cookie を設定した後は、メイン ドメイン名にどのようにログインしても、ブラウザを閉じて再度開かない限り、Cookie は保存されません。
何度も試した結果、偶然問題を発見しました。 以下はテストプロセスです。
Write2.asp ページを作成し、メイン ドメイン名の下に配置します。
プログラムコード
<%
Response.Cookies(CookieName)("TEST_COOKIE") = "TEST_COOKIE"
%>
ステップ 1: ブラウザを閉じた後、次の順序で実行します。Write.asp -> メイン ドメイン名の Read.asp -> サブドメイン名の Read.asp は通常通り読み込まれます。
ステップ 2: Clear.asp --> メイン ドメイン名の Read.asp --> サブドメイン名の Read.asp ここでクリア操作は成功です。
ステップ 3: Write.asp --> Write2.asp --> メイン ドメイン名 Read.asp --> サブドメイン名 Read.asp この時点で、両方の Read.asp が Cookie 値を読み取ることができます。
ステップ 4: ステップ 2 を再実行すると、メイン ドメイン名 Read.asp がまだ値を出力しているのに対し、サブドメイン名の下にある Read.asp の値がクリアされていることを確認します。
上記のテストに基づいて、ドメインをまたがって Cookie を使用する場合に注意する必要がある点を以下にまとめます。
1. Cookie グループ (または Cookie ディクショナリ) があり、Domain 属性を使用してドメイン名を指定する場合、グループに新しいメンバーを変更または追加する 追加するときは、操作の後に必ず Resonse.Cookies(CookieName).Domain 属性を追加してください。
2. 必要がない場合は、設定済みのドメインの Cookie グループを変更しないでください。Response.Cookies("CookieText") = CookieValue を使用して新しい Cookie を作成します。