web-dev-qa-db-ja.com

別のドメインのCookieを設定する方法

a.comというWebサイトがあり、このサイトの特定のページ(ページリンクなど)が読み込まれたときに、b.comという別のサイトのCookieを設定し、b.comにユーザーをリダイレクトするとします。

つまり、a.com/linkのロード時に、b.comのCookieを設定し、ユーザーをb.comにリダイレクトしたいのです。

私はそれをテストし、ブラウザは実際にa.com/linkからCookieを受信しましたが、b.comへのリダイレクト要求でそのCookieを送信しませんでした。普通ですか?

他のドメインにクッキーを設定できますか?

131
Rasoul Zabihi

別のドメインにクッキーを設定することはできません。これを許可すると、非常に大きなセキュリティ上の欠陥が生じます。

Cookieを設定するにはb.comを取得する必要があります。 a.comがユーザーをb.com/setcookie.php?c=valueにリダイレクトする場合

Setcookieスクリプトには、Cookieを設定してb.comの正しいページにリダイレクトするために次のものを含めることができます

<?php
    setcookie('a', $_GET['c']);
    header("Location: b.com/landingpage.php");
?>
103
qbert220

トップアンサーに似ていますが、ページにリダイレクトしてから戻ると、ユーザーエクスペリエンスが低下する代わりに、ドメインAに画像を設定できます。

<img src="http://www.example.com/cookie.php?val=123" style="display:none;">

そして、cookie.phpのexample.comであるドメインBには、次のコードがあります。

<?php
    setcookie('a', $_GET['val']);
?>

Subin へのヒント

44
Jonathan

おそらく、これにIframeを使用できます。 Facebookはおそらくこの手法を使用しています。詳しくはこちらをご覧ください here 。 Stackoverflowは同様の手法を使用しますが、HTML5ローカルストレージを使用します。詳細は blog

14
Ondrej Bozek

できません。それは厄介なセキュリティリスクになります。

5
Quentin

別のドメインのCookieを設定することはできません。

別のドメインにデータを渡す場合は、これをURLにエンコードできます。

a.com  ->  b.com/redirect?info=some+info (and set cookie) -> b.com/other+page
5
Patrik

RFC6265 を参照してください:

ドメイン属性がオリジンサーバーを含むクッキーの範囲を指定しない限り、ユーザーエージェントはクッキーを拒否します。たとえば、ユーザーエージェントは、foo.example.comの「example.com」または「foo.example.com」のドメイン属性を持つCookieを受け入れますが、ユーザーエージェントはドメイン属性を持つCookieを受け入れません「bar.example.com」または「baz.foo.example.com」の。

注:セキュリティ上の理由から、多くのユーザーエージェントは、「パブリックサフィックス」に対応するドメイン属性を拒否するように構成されています。たとえば、一部のユーザーエージェントは、「com」または「co.uk」のドメイン属性を拒否します。 (詳細については、セクション5.3を参照してください。)

ただし、上記の回避策はimage/iframeで機能しますが、その安全性が理由で推奨されません。

3
Roy Ling

a.my-company.comb.my-company.comの代わりにa.comb.comがある場合は、.my-company.comドメインのCookieを発行できます。これは受け入れられ、両方のドメインに送信されます。

2
stop-cran

できませんが、両方のページを所有している場合は...

1)クエリパラメータを介してデータを送信できます( http://siteB.com/?key=value

2)サイトA内にサイトBのiframeを作成し、ある場所から別の場所に投稿メッセージを送信できます。サイトBはサイトB Cookieの所有者であるため、正しい投稿メッセージを処理することにより、必要な値を設定できます。 (他の不要な送信者があなたにメッセージを送信するのを防ぐべきです!それはあなた次第であり、あなたはそれが起こるのを防ぐためにあなたが使うことを決めるメカニズムです)

0
Christian Adam