使用 PHP 或 JavaScript 在多个域上设置 Cookie

2022-08-30 18:18:40

我有3个主题相同的域名。如果有人选择了不同的主题,我希望它传播到所有3个领域,这样他们的体验就会保持不变。

我计划通过在域1上设置cookie来实现此目的,重定向到设置cookie的域2,重定向到设置cookie的域3,重定向回来。由于信息不需要安全或受保护,因此这可以正常工作,而不会出现真正的问题。

我讨厌3重定向的想法,只是为了在每个域上设置一个cookie,并正在寻找一些更优雅的东西。


答案 1

做谷歌正在做的事情。是的,Google正在做同样的事情,将用户登录到YouTube和位于不同域的其他Google服务。

创建一个 PHP 文件,用于在所有 3 个域上设置 Cookie。然后在要设置主题的域上,创建一个 HTML 文件,该文件将加载在其他 2 个域上设置 cookie 的 PHP 文件。例:

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

然后在 body 标记上添加一个 onload 回调。仅当图像完全加载时,即在其他2个域上设置cookie时,才会加载文档。加载回调 :

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

setcookie.php

我们使用PHP文件在其他域上设置cookie,如下所示:

<?php
if(isset($_GET['theme'])){
   setcookie("theme", $_GET['theme'], time()+3600);
}
?>

现在,在个域上设置了 Cookie。

来源 - 我的博客


答案 2

您可以在 iFrames 中包含其他两个域。有关更多信息,请搜索“第三方 Cookie”。但是,根据浏览器设置,用户可能不接受第三方 Cookie。这里还有其他一些想法:您最喜欢的跨域cookie共享方法是什么?