通过PHP设置Cookie适用于Chrome,但不适用于Firefox或IE

时间:2013-10-27 23:18:17

标签: php wordpress cookies cross-browser setcookie

我有一个问题,设置一个cookie在chrome中完美运行但不是IE或firefox。所有浏览器都是当前版本,我在Windows 8机器上。我正在尝试设置一个持续一年的cookie。

我可以验证IE和Firefox正在接收来自我的网站的其他插件和第三方服务创建的其他cookie,但它只是不想接受我尝试设置的cookie。

通过Firefox中的firebug,我试图查看被拒绝的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过期日期设置为一年
  5. 除了在我的浏览器中查看cookie之外,我还使用此代码来验证cookie,该cookie再次显示chrome中的输出但没有其他浏览器。

    <?php echo "'".$_COOKIE['returning_visit']."'"; ?>
    

    更新

    问题是只有在以管理员身份登录时才设置cookie。确实正在设置cookie。我创建了一个更具体的wordpress问题:

    解决方案

    问题是我的主机缓存了这些页面。需要解冻页面才能运行正确的php代码。管理员已禁用缓存,这就是我将cookie作为管理员而不是普通用户的原因。

1 个答案:

答案 0 :(得分:0)

我读了你的更新

  

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

它看起来像事件处理程序

add_action( 'init', 'visitor_cookie');
仅当用户是管理员时才会触发

我相信您在Chrome上使用管理员会话,在其他浏览器上工作。

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

之外