基本情况和基本相关信息:
我有一个在开始标记之前执行的 php 代码<doctype>
。希望是(如有必要)在加载其他任何内容之前根据用户浏览器的语言偏好发送重定向。
该脚本尝试根据支持的最高语言偏好做两件事:
- 使用 php:
setcookie()
创建带有两个字母语言代码的 cookie。- 示例 cookie 名称 = 值:x_language = es
- 使用 php: header("位置:" . $requestedSite); 重定向到子域,
- 示例域:es.domain.com
例子:
if (isset($_COOKIE['x_language'])) {
-Determine correct subdomain based on cookie value-
-If not currently on that subdomain, redirect to it-
} else {
setcookie('x_language','es',time() + 31536000 ,'/','.domain.com' );
header("Location: " . $requestedSite);
}
问题: Firefox 完美运行。Chrome(和其他浏览器)根本无法识别 cookie。
我把它归结为:
print_r($_COOKIE)
在 Firefox 中正常工作,并返回一个可爱的填充数组。print_r($_COOKIE)
在 Chrome 中失败,并返回一个空数组。
这是问题的核心,我的函数无法识别 cookie 的存在,因为 Chrome 没有。
- 我确保每个浏览器都接受 cookie。
- 我已经检查了开发工具,以确保 cookie 在所有浏览器上都存在,(它是)。
- 我意识到 cookie 的值在下一页加载之前不可用,但这不是问题。即使设置后,它也不会读取。
- 初始 setcookie() 之上没有输出;
那么如何让 Chrome(和其他浏览器)识别自己的 cookie?!有谁知道为什么这一切都可以在 Firefox 上完美运行,但在其他地方却失败了?
我决定试试这个。我创建了一个仅包含的文件:
<?php
print_r($_COOKIE);
?>
同样,我在 Firefox 中看到了 cookie 数组。同时,在 Chrome、IE、Opera、Safari 中,我得到一个空数组。这可能是服务器问题吗?