测试是否设置了cookie, php



我需要运行一个查询,只有当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超全局变量中不能立即可用是正常的。

最新更新