【发布时间】: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 并为“更改为意大利语”链接提供意大利国旗图标。