我正在创建一个多语言网站,在用户登录后,我需要在所有域(在同一台服务器上)创建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)可以实现这样的事情吗?
所有域都位于同一服务器上。
我过去使用的解决方案是在数据库中创建一个"session_access"或"cookie_access"表,所有站点都可以访问该表,以查看是否可以创建会话/cookie而无需再次登录。
例如...
- 站点 A 用于登录
- PHP 使用 cookie 在 MySQL 中的"cookie_access"表上创建记录同上。
- 用户跳转到站点 B(通过链接或转发并传递 ID) PHP 根据站点 A 的 cookie
- ID 读取活动会话的"cookie_access"表,如果存在,站点会自动登录用户并为站点 B 设置新的 cookie。
没有纯粹的 php 解决方案。您不能为提供响应的域以外的其他域设置 cookie。 Curl
和get_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 中使用非阻塞第三方对象引入了更长的加载时间。