11

これは通常、クロス サイト スクリプティング攻撃に関連していることは理解していますが、1 つのドメインに属する複数のサブドメイン全体でセッションが有効なままになるにはどうすればよいでしょうか (例: ユーザーが 1 回だけログインし、両方にアクセスできる場合)。 subdomain1.domain.com と subdomain2.domain.com を同じセッションで)。最初にそれがどのように機能するかを理解する必要があると思いますが、これまでのところ、関連するものはあまり見つかりませんでした.

しかし、繰り返しになりますが、私は正しい質問をしていなかったのかもしれません。

前もって感謝します :)

4

7 に答える 7

18

インプロセス セッションは有効なままにすることはできませんが、Web アプリケーションをコーディングして、複数のサブドメイン間で Cookie を許可することはできます。ドメインを次のように設定する必要があります。

Response.Cookies("CookieName").Domain = ".mydomain.com"

期間を覚えておいてください。

于 2009-06-02T12:44:20.980 に答える
6

ドメイン間でセッション データまたは Cookie データを共有する方法は多数あります。最も簡単な方法は、共有データ ストアを介してサーバー側で共有することです。しかし、それがそれほど簡単であるなら、あなたはこの質問をしないでしょう.

これを行う別の方法も同様に簡単です。ドメインone.comにはいくつかのセッション データが含まれており、これを に渡したいと言っname=aleemid=123two.comます。次の手順に従います。

  1. 電話をかけるtwo.com/api/?name=aleem&id=123
  2. two.comクエリ パラメーターを介してデータを取得すると、データを使用して Cookie が作成されます。この Cookie はtwo.comドメインの下に保存されます。
  3. two.com次にREFERER、この場合たまたまone.com

これは単純化されたシナリオです。ドメインtwo.comは信頼できる必要がone.comあり、それだけでなく、リクエストが本物であり、ユーザーによって作成されたものではないことを知る必要があるため、公開/秘密鍵を使用してこれを軽減する必要があります.

于 2009-06-02T12:57:19.940 に答える
2

デフォルトでは、サイトのすべての Cookie はクライアントに一緒に保存され、すべての Cookie はそのサイトへの要求とと​​もにサーバーに送信されます。つまり、サイト内のすべてのページが、そのサイトのすべての Cookie を取得します。ただし、次の 2 つの方法で Cookie の範囲を設定できます。

  1. Cookie の範囲をサーバー上のフォルダーに制限します。これにより、Cookie をサイト上のアプリケーションに制限できます。
  2. スコープをドメインに設定します。これにより、ドメイン内のどのサブドメインが Cookie にアクセスできるかを指定できます。

詳細については、こちらをご覧ください

于 2009-06-02T12:45:56.420 に答える
1

サブドメインがそのCookieを受信できるようにドメインに設定されているCookieに関するコメントは、その側面を提供しますが、欠けているのはセッションの一貫性です。

これは、ファーム内のサーバー間で状態を維持する問題と非常によく似ていると思います。解決策は、おそらくセッション ストアが両方のサイトで一貫していることを確認することです (それらが IIS の同じ「Web サイト」からのサーバーでない場合)。セッション ストアを SQL Server に移動することができます ( HOW TO: ASP.NET セッション状態を格納するように SQL Server を構成する)。これは、各サイトが Cookie に関連するセッション データを探すときに同じストアにクエリを実行するため、おそらく目的を果たします。提示されました。

それがあなたを正しい軌道に乗せることを願っています。

于 2009-06-02T12:52:05.770 に答える
1

共通のサブドメインを設定できる場合は、次のことができます。

サブドメインの html ファイルの先頭に、次のように JavaScript ファイルを含めます。

<script src="http: //common.domain.com/check.asp"></script>

check.asp で、logged_in Cookie を探し、存在しない場合は、次のようなものを使用してhttp://common.domain.com/login.aspなどのページを表示します。

<%
if (cookie_not_found){
%>
location.href = "http: //common.domain.com/login.asp";
<%
}
%>

人がユーザー名パスワードを送信したら、それを同じ login.asp に送信し、セッション cookie (common.domain.com ドメインに設定されます) を設定してから にリダイレクトしhttp://subdomain1.domain.comます。

ここで何が起こるかというと、埋め込まれた "common.domain.com/check.asp" に対して呼び出しが行われ、common.domain.com の Cookie が要求と共にブラウザーによって送信されます。したがって、subdomain1.domain.com にいる場合でも、セッションが有効かどうかがわかります。

于 2009-06-02T13:41:41.753 に答える
0

特定のドメインに Cookie を設定できます。

PHP では、setCookie()メソッドにトップレベル ドメインを指定できるパラメーターが含まれているため、Cookie はすべてのサブドメインに対して有効です。あなたのタグに基づいて、asp.net で作業していることがわかります。おそらくこれはaspにも存在します...

aspを少し検索した後:

これを試して:

Response.Cookies("CookieName").Domain = ".mydomain.com"

またはこれを読む

于 2009-06-02T12:41:04.670 に答える
0

これが機能する解決策です:

http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/

于 2010-02-18T12:30:55.540 に答える