【发布时间】:2013-03-08 19:45:58
【问题描述】:
基本情况及基本相关信息:
我有一个在打开 <doctype> 标记之前执行的 php 代码。希望是(如有必要)在加载其他任何内容之前根据用户浏览器的语言偏好发送重定向。
脚本尝试根据支持的最高语言偏好做两件事:
- 使用 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 中,我得到一个空数组。这可能是服务器问题吗?
【问题讨论】:
-
我以前遇到过这个问题。您发送
Location标头和Set-Cookie标头的顺序在这里很重要。不过我不记得哪个先了。碰到其他聪明的大师...... -
Webkit 错误? stackoverflow.com/questions/1144894/…
-
谢谢,兰登斯。但似乎两者都不是。问题在于读取 cookie,而不是写入。 cookie 正按应有的方式编写(我可以在 Dev Tools 控制台中看到它),但由于某种原因它对我的 php 脚本不可用。
-
Chrome 对子域 cookie 共享可能更挑剔,当您打印 $_COOKIE 时,您是在 domain.com 还是 subdomain.domain.com 上? stackoverflow.com/questions/7880305/…
-
这种行为是否可以在网上某处观察到?
标签: php google-chrome firefox cookies