【问题标题】:PHP create cookies on different domains on same server (cURL)PHP 在同一服务器上的不同域上创建 cookie (cURL)
【发布时间】:2015-03-15 04:00:18
【问题描述】:

我正在创建一个多语言网站,在用户登录后,我需要在所有域中创建 cookie(在同一台服务器上):

example.com
example.de
example.it

我知道这个解决方案 - http://subinsb.com/set-same-cookie-on-different-domains(从 img 属性内部调用 .php 文件)但是有没有纯 PHP 解决方案?

我正在尝试制定 cURL 解决方案,但它不起作用:

$url = "http://www.example.de/createcookie.php?value=hashvar";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_exec($curl);

用户登录后,它需要在当前域上创建 cookie,然后调用(通过 cURL)createcookie.php 文件在其他域上创建 cookie。

是否可以通过 cURL 或其他一些 PHP 函数(如 get_file_contents)实现类似的功能?

所有域都放在同一台服务器上。

【问题讨论】:

  • 不可能。站点 A 无法在用户的浏览器上为站点 B 创建 cookie,站点 B 的 cookie 也不能通过对站点 A 的请求获得。您可以进行所有想要的卷曲,但这些请求将来自您的服务器,并且会有您无法在用户的浏览器上设置这些 cookie,因为它们用于“外国”域。您必须将用户物理重定向到您的其他域。这可以像跨所有域的链式 301 重定向一样简单,或者让浏览器向您的其他域发出 ajax 请求。
  • 调用 example.de/createcookie.php?value=hash 的 Ajax 请求可以工作吗?
  • 您必须输出<script src="foo.it/whatever.php"> 并为您的每个域都有一个,然后希望用户启用JS。
  • 这有点像使用 img 标签。谢谢,也许重定向是解决这个问题的方法;)
  • 是的,图像会更容易。这实际上可能会更好。如果您提供更改语言的链接,那么您可以使用 <img src="http://example.it/italian_icon.php" /> 来设置 cookie 并为“更改为意大利语”链接提供意大利国旗图标。

标签: php curl cookies


【解决方案1】:

我过去使用的一个解决方案是在数据库中创建一个“session_access”或“cookie_access”表,所有站点都可以访问该表,以查看是否可以在不需要再次登录的情况下创建会话/cookie。

例如...

  • 站点A用于登录
  • PHP 使用 cookie 在 MySQL 中的“cookie_access”表上创建记录 身份证。
  • 用户跳转到站点 B(通过链接或传递 ID 的转发)
  • PHP 根据来自站点 A 的 cookie ID 读取活动会话的“cookie_access”表,如果存在,站点会自动登录用户并为站点 B 设置新的 cookie。

【讨论】:

  • 隐含的要求是设置 cookie,因此如果用户访问其他域而没有来自他登录的域的链接
【解决方案2】:

没有纯php解决方案。您不能为另一个域设置 cookie,而不是您提供响应的域。 Curlget_file_contents 不与用户的浏览器交互。设置 cookie 由处理您的服务器响应的浏览器执行。

但是,除了提供来自其他两个域(称为第三方域)的图像(或其他文件类型),您还可以重定向所有这些域并在每次后续操作之前设置一个 cookie重定向(使用header("Location: url");

即在 example.com 上登录后,您会重定向到:

  • example.it/your_script.php。您重定向到的文件设置 cookie 并且不返回任何 html 重定向到
  • example.de/your_script.php。同样,您设置一个 cookie 并再次重定向到
  • example.com/login_destination.php

然而,与在 html 中使用非阻塞第三方对象相比,这会引入更长的加载时间。

【讨论】:

  • 另一种设计可能是:将 example.com 作为处理登录并保存“主 cookie”的主服务器。当用户在没有该 cookie 的情况下访问 example.it 时,转发到 example.com,后者将在 get 参数中使用 cookie 转发回 example.it - 或无法找到此类 cookie 的信息。
  • 重定向可能是这里的解决方案。关于加载时间,只有一次用户从 example.com、example.de 或 example.it 登录并重定向到其他语言域。之后,它从当前选择的语言(域)中读取 cookie。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2014-03-17
  • 1970-01-01
  • 2011-08-23
  • 2014-06-10
相关资源
最近更新 更多