我只有在没有设置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 views
isset($_COOKIE[$cookiename])
表达式总是返回false,即使cookie只设置在6行以上。
答案 0 :(得分:1)
setcookie()
在响应上添加了Set-Cookie:
标题。
$_COOKIE
包含浏览器在请求上发送的Cookie。
当您使用setcookie()
时,它不会立即影响$ _COOKIE,但是下次加载页面时,$_COOKIE
将拥有您的值,因为浏览器已在请求中发送了Cookie数据。 / p>
您需要稍微重构一下代码,这样在同一个请求中使用setcookie后,您就不会在$ _COOKIE中检查值。
答案 1 :(得分:0)
setcookie只设置标头,即发送给客户端。它不会改变$ _COOKIE超全局。另一方面 - $ _COOKIE充满了客户发送的cookie。因此,在第一步 - 您使用setcookie设置cookie并且在$ _COOKIE中没有任何内容,因为客户端尚未发送它,并且仅在下一个请求时发送。因此,在_COOKIE超全球中不能立即获得cookie是正常的。