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

I have an issue where setting a cookie works perfectly in chrome but not IE or firefox. All the browsers are the current version and I am on a Windows 8 machine. I am trying to set a cookie which lasts for a year.

I can verify that IE and firefox are receiving other cookies from my site created by other plugins and 3rd party services but it just does not want to accept the cookie I am trying to set.

Via firebug in Firefox, I tried to view rejected cookies but none are listed and it is like my cookie just does not want to work outside of chrome.

This code is in a functions.php file inside of my wordpress website:

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
      );
    }
}

Notes:

  1. As a note my domain is currently development.mydomain.com which will be moved to mydomain.com
  2. This is not on a localhost/server, its at a hosting company
  3. This cookie should be available across my entire website.
  4. Cookie expiration date is set to one year

In addition to viewing the cookies in my browser, I was also using this code to verify the cookie which again showed output in chrome but no other browser.

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

UPDATE

The issue is the cookie is only set when logged in as admin. The cookie is indeed being set. I created a question more specific to wordpress:

Solution

The issue was my host caching the pages. Needed to uncache the pages for the proper php code to run. Caching was disabled for Admins, which is why I got the cookie as admin and not a normal user.

douya6229
douya6229 彼得谢谢你,我找到了:)。@Machavity,谢谢你的链接:)。
接近 7 年之前 回复
dongyan1548
dongyan1548 是的,就在setcookie之前添加echo“我正在尝试setcookie参数...如果一切都很好..它可能是phpbug。另一件事是-setcookie必须在任何输出之前被解雇所以确保没有空格在php文件等中。我在firebug的网络选项卡中找不到任何cookiehttp信息。扩展请求行,你应该找到像“请求响应cookie”等标签。检查“请求”选项卡
接近 7 年之前 回复
dongsan6889
dongsan6889 虽然我对Firebug有着永恒的爱,但实际上我更喜欢Firefox开发者工具。它有一个用于管理cookie的菜单和一个非常棒的工具,可以看到所有设置,甚至可以轻松删除它们addons.mozilla.org/en-US/firefox/addon/web-developer
接近 7 年之前 回复
doulu2029
doulu2029 谢谢你的协助彼得。我的网站有其他cookie但我在firebug的网络标签中找不到任何cookiehttp信息。“网络”选项卡仅显示实际调用,例如获取调用的文件。cookies标签实际上是我看到cookie信息的唯一地方,但没有类似Cookie:xx-new-cookie-values-xx..我会继续查看它,所以我知道以备参考。再次感谢你。
接近 7 年之前 回复
drgawfsf1069
drgawfsf1069 Firefox:使用firebug,找到请求(在“Net”标签中),阅读hedaers,其他浏览器:我不知道。我真的不认为这里的任何人会帮助你(你的代码应该运行得很好),我建议你做一些调试-使用浏览器调试工具检查http标头,并确保在每个浏览器上执行此功能,它可能是wordpress问题等只是做我们所做的调试工作
接近 7 年之前 回复
dousilie9522
dousilie9522 原来只为登录的管理员而不是普通用户设置的cookie。我不知道为什么因为我有其他脚本可以运行类似的调用,适用于所有用户。
接近 7 年之前 回复
duancong2965
duancong2965 彼得,试图弄清楚如何查看这样的http标题。@Machavity,遗憾的是没有用。Cookie仍然只在Chrome中创建,但不会在任何其他浏览器中创建。
接近 7 年之前 回复
duanfu4446
duanfu4446 我的意思是将你的第一行更改为add_action('init','visitor_cookie',1);
接近 7 年之前 回复
du0204
du0204 检查firefox和IE中的HTTP标头。如果Cookie:xx-new-cookie-values-xx没有显示检查功能是否真的被解雇了。基本上调试一切,像firebug这样的浏览器工具是第一步。
接近 7 年之前 回复
dougou7782
dougou7782 ,我是wp插件的新手。你到底什么意思?和彼得,这些价值观的回声出现在上面。$visitor_id的输出显示为hd526da66a767,chrome显示过期日期与2014年相同,而域名chrome显示为.development.mydomain.com
接近 7 年之前 回复
duansha3771
duansha3771 可能没有任何区别,但在add_action调用中添加第三个参数1。在我写的一个WP插件中,我必须启动会话,这是确保它工作的唯一方法。
接近 7 年之前 回复
downloadbooks_2014
downloadbooks_2014 请向我们展示'returning_visit',$visitor_id,$expire,$path,$domain的回声。接下来,我将使用像firebug等浏览器工具调试HTTP头。
接近 7 年之前 回复
dongzhunqiu4841
dongzhunqiu4841 我将进入浏览器的设置区域以显示cookie。在检查之前,我浏览了几页网页。我也使用firebug和IE开发工具进行实时cookie检查。我还使用chrome中的开发人员工具进行实时预览。
接近 7 年之前 回复
dtbl1231
dtbl1231 你在哪里测试是否设置了cookie?您无法在与设置cookie相同的负载上测试cookie
接近 7 年之前 回复

1个回答



我读了你的更新</ p>


问题是只设置了cookie 以管理员身份登录时。 确实正在设置cookie。 </ p>
</ blockquote>

它看起来像事件处理程序</ p>

  add_action('init','visitor_cookie'); 
</ code> </ pre>

仅在用户是管理员时才会被触发.. </ p>

我相信你在Chrome上工作管理员会话,在其他浏览器上你 以客人身份工作。</ p>

把东西放在 if if(is-admin)</ code>表达式</ p>
</ div>

展开原文

原文

i read your update

The issue is the cookie is only set when logged in as admin. The cookie is indeed being set.

It looks like the event handler

add_action( 'init', 'visitor_cookie');

is fired only when user is an admin..

I believe on Chrome you work on admin session, on other browser you work as guest.

put the thing outside if( is-admin ) expression

douyue1998
douyue1998 问题是我的主机缓存了这些页面。 需要解冻页面才能运行正确的php代码。 管理员已禁用缓存,这就是我将cookie作为管理员而不是普通用户的原因。
接近 7 年之前 回复
dongshan3806
dongshan3806 我接受你的回答彼得。 但是我没有使用任何令人困惑的is-admin表达式。 我正在用我创建的另一个问题更新我的帖子。 但非常感谢您的帮助。
接近 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐