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 は、すべての Read.asp ページで作成された Cookie の値を読み取ることができます。 Write.asp を実行し、Clear.asp を再度実行してクリアします。すべて OK であり、問題はないようです。
しかし、この方法を実際の現場に適用するには問題があります。
問題の説明:
初めてログインするときはすべて問題ありません。すべてのサブドメイン名はメイン ドメイン名に保存されている Cookie にアクセスできますが、ログアウトするとサブドメイン名の Cookie はクリアされますが、メイン ドメイン名の Cookie は削除されません。メイン ドメイン名の Cookie を強制的に削除した後は、どのようにメイン ドメイン名にログインしても、ブラウザを閉じて再度開かないと Cookie は保存されません。
何度も試した結果、偶然問題を発見しました。 以下はテストプロセスです。
Write2.asp ページを作成し、メイン ドメイン名の下に配置します。
<%
Response.Cookies(CookieName)("TEST_COOKIE") = "TEST_COOKIE"
%>
ステップ 1: ブラウザを閉じた後、次の順序で実行します。 Write.asp -> メイン ドメイン名の Read.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 を作成してください。