1

仅当未设置 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 行。

4

2 回答 2

2

setcookie()在响应上添加Set-Cookie:标头。

$_COOKIE包含浏览器根据请求发送的 cookie 。

当您使用setcookie()它时,$_COOKIE 不会立即生效,但是当您下次加载页面时,$_COOKIE将有您的值,因为浏览器已经在请求中发送了 cookie 数据。

您需要稍微重构您的代码,这样您就不会在同一请求中使用 setcookie 后检查 $_COOKIE 中的值。

于 2013-03-10T17:27:22.627 回答
0

setcookie 仅设置标题,即发送到客户端。它不会改变 $_COOKIE 超全局变量。另一方面 - $_COOKIE 填充了从客户端发送的 cookie。因此,在第一步 - 您使用 setcookie 设置 cookie 并且在 $_COOKIE 中没有任何内容,因为客户端尚未发送它,并且只会在下一个请求时发送。因此,cookie 在 _COOKIE 超全局中无法立即使用是正常的。

于 2013-03-10T17:30:36.017 回答