【发布时间】:2013-11-06 15:19:44
【问题描述】:
我有一个问题,即设置 cookie 在 chrome 中完美运行,但在 IE 或 firefox 中无法正常运行。所有浏览器都是当前版本,我在 Windows 8 机器上。我正在尝试设置一个持续一年的 cookie。
我可以验证 IE 和 firefox 是否正在从我的站点接收由其他插件和 3rd 方服务创建的其他 cookie,但它只是不想接受我尝试设置的 cookie。
通过 Firefox 中的萤火虫,我试图查看被拒绝的 cookie,但没有列出,这就像我的 cookie 只是不想在 chrome 之外工作。
此代码位于我的 wordpress 网站内的 functions.php 文件中:
add_action( 'init', 'visitor_cookie');
function visitor_cookie() {
if (!isset($_COOKIE['returning_visit'])) {
$traffic_type = 'hd';
$timestring = microtime();
$pieces = explode(" ", substr($timestring, 2));
$pieces[0] = "1".substr($pieces[0],0,3);
$visitor_id = $traffic_type.dechex($pieces[1]) . dechex($pieces[0]);
$expire = time()+60*60*24*360;
$path = '/';
$domain = parse_url(get_option('siteurl'), PHP_URL_HOST);
setcookie(
'returning_visit',
$visitor_id,
$expire,
$path,
$domain
);
}
}
注意事项:
- 请注意,我的域目前是 development.mydomain.com,它将被移动到 mydomain.com
- 这不是在本地主机/服务器上,而是在托管公司
- 这个 cookie 应该在我的整个网站上都可用。
- Cookie 过期日期设置为一年
除了在我的浏览器中查看 cookie,我还使用此代码来验证 cookie,该 cookie 再次在 chrome 中显示输出,但没有其他浏览器。
<?php echo "'".$_COOKIE['returning_visit']."'"; ?>
更新
问题是cookie仅在以管理员身份登录时设置。 cookie 确实正在设置中。我创建了一个更具体到 wordpress 的问题:
解决方案
问题是我的主机缓存页面。需要取消缓存页面以运行正确的 php 代码。对管理员禁用缓存,这就是为什么我将 cookie 作为管理员而不是普通用户获取的原因。
【问题讨论】:
-
你在哪里测试看是否设置了cookie?您无法在与设置它的负载相同的负载上测试 cookie
-
我将进入浏览器的设置区域以显示 cookie。在检查之前,我浏览了该网站几页。我还使用 firebug 和 IE 开发工具进行实时 cookie 检查。我也在使用 chrome 中的开发者工具进行实时预览。
-
我的意思是把你的第一行改成
add_action( 'init', 'visitor_cookie', 1); -
Firefox:使用 firebug,找到请求(在“Net”选项卡中),阅读 hedaers,其他浏览器:我不知道。我真的不认为这里有人会帮助你(你的代码应该运行得很好),我建议你做一些调试 - 使用浏览器调试工具检查 http 标头,并确保在每个浏览器上都执行此功能,可能是 wordpress 问题等。像我们一样做调试工作
-
虽然我对 Firebug 有着永恒的爱,但实际上我更喜欢 Firefox 开发者工具。它有一个仅用于管理 cookie 的菜单和一个非常棒的工具,可以查看所有设置,甚至可以轻松删除它们addons.mozilla.org/en-US/firefox/addon/web-developer
标签: php wordpress cookies cross-browser setcookie