web-dev-qa-db-fra.com

Comment définir un cookie pour un autre domaine

Disons que j'ai un site Web appelé a.com, et lorsqu'une page spécifique de ce site est chargée, par exemple, un lien de page, j'aime définir un cookie pour un autre site appelé b.com, puis rediriger l'utilisateur vers b.com.

Je veux dire, au chargement de a.com/link je veux définir un cookie pour b.com et rediriger l'utilisateur vers b.com.

Je l'ai testé et le navigateur a reçu le cookie de a.com/link, mais il n'a pas envoyé ce cookie lors de la demande de redirection à b.com. Est-ce normal?

Pouvons-nous définir des cookies pour d'autres domaines?

135
Rasoul Zabihi

Vous ne pouvez pas définir de cookies pour un autre domaine. Permettre cela présenterait un énorme défaut de sécurité.

Vous devez obtenir b.com pour définir le cookie. Si a.com redirige l'utilisateur vers b.com/setcookie.php?c=value

Le script setcookie peut contenir les éléments suivants pour définir le cookie et rediriger vers la page correcte sur b.com

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

Semblable à la réponse du haut, mais vous pouvez définir une image sur le domaine A au lieu de rediriger vers la page et inversement, ce qui entraînera une mauvaise expérience utilisateur.

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

Et puis sur le domaine B, exemple.com dans cookie.php, vous aurez le code suivant:

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

Hattip à Subin

45
Jonathan

Vous pouvez probablement utiliser Iframe pour cela. Facebook utilise probablement cette technique. Vous pouvez en lire plus à ce sujet ici . Stackoverflow utilise une technique similaire, mais avec le stockage local HTML5, vous en saurez plus sur leur blog

14
Ondrej Bozek

Tu ne peux pas. Ce serait un risque de sécurité méchant.

5
Quentin

La configuration de cookies pour un autre domaine n'est pas possible.

Si vous souhaitez transmettre des données à un autre domaine, vous pouvez l'encoder dans l'URL.

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

voir RFC6265 :

L'agent d'utilisateur rejettera les cookies sauf si l'attribut Domaine spécifie une étendue du cookie qui inclurait le serveur d'origine. Par exemple, l'agent d'utilisateur acceptera un cookie avec un attribut de domaine "exemple.com" ou de "foo.example.com" à partir de foo.example.com, mais l'agent d'utilisateur n'acceptera pas un cookie avec un attribut de domaine "bar.example.com" ou de "baz.foo.example.com".

REMARQUE: Pour des raisons de sécurité, de nombreux agents d'utilisateur sont configurés pour rejeter les attributs de domaine correspondant aux "suffixes publics". Par exemple, certains agents utilisateurs rejetteront les attributs de domaine "com" ou "co.uk". (Voir la section 5.3 pour plus d'informations.)

Mais la solution de contournement mentionnée ci-dessus avec image/iframe fonctionne, bien que cela ne soit pas recommandé en raison de son insécurité.

3
Roy Ling

Si vous avez a.my-company.com et b.my-company.com au lieu de a.com et b.com, vous pouvez émettre un cookie pour le domaine .my-company.com - il sera accepté et envoyé aux deux. des domaines.

3
stop-cran

Vous ne pouvez pas, mais ... Si vous possédez les deux pages, alors ...

1) Vous pouvez envoyer les données via des paramètres de requête ( http://siteB.com/?key=value )

2) Vous pouvez créer un iframe du site B à l'intérieur du site A et envoyer des messages d'un endroit à un autre. Étant donné que le site B est le propriétaire des cookies du site B, il sera en mesure de définir la valeur dont vous avez besoin en traitant le message approprié. (Vous devez empêcher les autres expéditeurs indésirables de vous envoyer des messages! À vous de décider ainsi que du mécanisme que vous décidez d'utiliser pour empêcher que cela ne se produise)

0
Christian Adam