【问题标题】:Setting Cookie via PHP works in Chrome but not Firefox or IE通过 PHP 设置 Cookie 在 Chrome 中有效,但在 Firefox 或 IE 中无效
【发布时间】: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
      );
    }
}

注意事项:

  1. 请注意,我的域目前是 development.mydomain.com,它将被移动到 mydomain.com
  2. 这不是在本地主机/服务器上,而是在托管公司
  3. 这个 cookie 应该在我的整个网站上都可用。
  4. 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


【解决方案1】:

我看了你的更新

问题是cookie仅在以管理员身份登录时设置。 cookie 确实正在设置中。

看起来像事件处理程序

add_action( 'init', 'visitor_cookie');

只有当用户是管理员时才会触发..

我相信你在 Chrome 上工作在管理会话上,在其他浏览器上你作为访客工作。

把东西放在if( is-admin )表达式外面

【讨论】:

  • 我接受你的回答彼得。但是,我没有使用任何令我困惑的 is-admin 表达式。我正在用我创建的另一个问题更新我的帖子。但是非常感谢您的帮助。
  • 问题是我的主机缓存页面。需要取消缓存页面以运行正确的 php 代码。对管理员禁用缓存,这就是为什么我以管理员而不是普通用户的身份获取 cookie。
猜你喜欢
  • 2014-01-11
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多