web-dev-qa-db-ja.com

クッキー-複数のドメインにまたがって設定

私の会社の設定は次のとおりです。

  • subdomain1.domain1.com
  • subdomain2.domain1.com
  • subdomain3.domain1.com
  • subdomain4.domain1.com
  • subdomain5.domain1.com
  • subdomain6.domain1.com

  • subdomain1.domain2.com

  • subdomain2.domain2.com
  • subdomain3.domain2.com
  • subdomain4.domain2.com
  • subdomain5.domain2.com
  • subdomain6.domain2.com

各サイトでは、サブドメインごとに100のサイトが存在する可能性があることを念頭に置いて、ユーザーはログインできます。開発者として、複数のブラウザーでフロントエンドをテストする必要がありますが、一部の作業は、ログインしたセクションでのみ必要になる場合があります。

ユーザー名とパスワード(および機密保持のために言及できないその他の詳細)を保存できるユーザースクリプトを作成しました。スクリプトは、ログインフォームに入力し、[送信]ボタンをクリックして、ユーザーアカウントが存在するかどうかを確認します。そうでない場合は、登録されます。つまり、登録プロセスが自動化されます。

同じドメインのサブドメイン間でCookieを共有するのは簡単です。 subdomain1.domain1.comを使用している場合は、subdomain2.domain1.comで取得できるCookieを保存できます。ただし、domain2用にこれらも保存したいと思います。これを機能させることができないようです。

私はここから2つの解決策を見ることができます-どちらか:

1)domain2にサイトをロードするuserscriptを使用してiFrameをアタッチします。次に、クエリ文字列を使用して、何を何に設定するかを決定します。

2)method = "POST"のフォームを使用し、各ドメインのファイルに投稿するだけです。

どちらの方法でも、特にCookieが変更されるたびにCookieが更新される場合は、リソースを大量に消費します。 URLマスキングも用意されています。したがって、abc.clientdomain1.com、abc.clientdomain2.comなどのサイトも考慮する必要があります。

これを達成するためのより簡単な方法を知っている人はいますか?

13
ClarkeyBoy

Cookie専用の共通ドメインを作成し、それをゲッター/セッターAPIとして使用します。

http://cookie.domain.com/set/domain1
http://cookie.domain.com/get/domain1

http://cookie.domain.com/set/domain2
http://cookie.domain.com/get/domain2

等々。

11
AlienWebguy

この回答は、「 PHPまたはJavaScript "を使用して複数のドメインにCookieを設定する」という質問に対する私の回答とは少し異なります。

Googleが行っていることを実行します。 3つのドメインすべてにCookieを設定する[〜#〜] php [〜#〜](またはその他のサーバー言語ファイル)ファイルを作成します。次に、ログインが設定されるドメインで、[〜#〜] html [〜#〜]ファイルを作成します。このファイルはをロードします。 [〜#〜] php [〜#〜]他の2つのドメインにCookieを設定するファイル。例:

<html>
 <head></head>
 <body>
 Please wait..........
 <img src="http://domain2.com/setcookie.php?user=encryptedusername"/>
 <img src="http://domain3.com/setcookie.php?user=encryptedusername"/>
 </body>
</html>

次に、onloadコールバックをbodyタグに追加します。ドキュメントが読み込まれるのは、画像が完全に読み込まれたとき、つまり他の2つのドメインにCookieが設定されているときだけです。オンロードコールバック:

<head>
 <script>
 function loadComplete(){
  window.location="http://domain1.com";//URL of domain1
 }
 </script>
</head>
<body onload="loadComplete()">

これで、Cookieは3つのドメインに設定されます。

ソース

9
Subin

ユーザー名とハッシュ化されたパスワードを使用してCookieを設定するdomain2のスクリプトタグを含めます。

<script type="text/javascript" src="http://domain2.com/cookie_login_page.php?username=johnsmith&hash=1614aasdfgh213g"></script>

次に、ハッシュされたパスワードが一致することを確認できます(一方向)。

キーポイント:

  1. 文字列をハッシュする前に、サーバーによって合意されるタイムスタンプ(16:00、16:10など)を追加して、URLのハッシュを時間に敏感にします。 HTTPSを使用している場合、これはそれほど問題にはなりません。

  2. パスワードがすでにハッシュされている場合は、両方のサーバーでソルトが同じであると仮定して、パスワードをダブルハッシュしても問題ありません。

サンプルPHPコード:

src:

<script type="text/javascript" src="/cookie_login_page.php?username=<?php echo $username; ?>&hash=<?php echo md5($password . date('H')); ?>"></script>

dest:

<?php 

$password = get_password($_GET['username']);
if($_GET['hash'] == md5($password . date('H')) {
    // set the cookie
}
3
Jonathan Rich

セキュリティ上の理由から、サイトは他のドメインでCookieを設定または取得することはできません。 javascriptを介して送信するフォームのスクリプトを作成するのがおそらく最も簡単であり、必要なcooikesをブラウザーのキャッシュに保存します。

2
cdeszaq

他の人が述べているように、ドメイン間でCookieにアクセスすることはできません。ただし、サーバーコードを制御できる場合は、本文で情報を返し、クライアントがサーバーごとにその情報を読み取って保存できるようにすることができます。

私の場合、単一のクライアントを複数のサーバーに接続し、各サーバーへの認証済み接続を維持しています。それぞれのセッションがいつ期限切れになるかを知る必要があるので、認証サービスはCookieを返します。さらに、応答の本文を変更して関連データを送り返し、そのデータを読み取って独自のCookieを設定できるようにします。 。

これを行うことで、必要なものを手動で追跡できます。すべてのシナリオで機能するわけではありませんが、私のような人にとってはうまくいくかもしれません。

0
Craig