我需要运行一个查询,只有当cookie没有设置,它刚刚被设置。(换句话说,这是用户第一次访问该页面)
我试了如下:
$cookiename = "item_".$itemid;
if(!isset($_COOKIE[$cookiename])){
setcookie($cookiename, "viewed", time()+60*60*18);
$was_set="no";
}
//if it wasn't set and now it is
if(isset($_COOKIE[$cookiename]) and $was_set=="no") {
mysql_query("UPDATE items_details SET views=views+1 where iid=$itemid");
echo "<!-- +1 view -->";
}
else {
echo "<!-- +0 views -->";
}
第一部分工作得很好,cookie设置如果它没有,但第二部分不工作,它总是返回+0视图
isset($_COOKIE[$cookiename])
表达式总是返回false,即使cookie设置在6行以上。
setcookie()
在响应上添加Set-Cookie:
标头。
$_COOKIE
包含浏览器在请求时发送的cookie。
当您使用setcookie()
时,它不会立即影响$_COOKIE,但是下次加载页面时,$_COOKIE
将具有您的值,因为浏览器已经在请求中发送了cookie数据。
你需要重构一下你的代码,这样你就不会在同一个请求中使用setcookie后检查$_COOKIE中的值
setcookie只设置发送到客户端的报头。它不会改变$_COOKIE超全局变量。另一方面- $_COOKIE是由客户端发送的cookie填充的。所以在第一步-你用setcookie设置cookie,并且$_COOKIE中没有任何内容,因为客户端还没有发送它,并且只会在下一次请求时发送。因此,cookie在_COOKIE超全局变量中不能立即可用是正常的。