测试是否已设置cookie,php

时间:2013-03-10 17:21:57

标签: php cookies isset

我只有在没有设置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行以上。

2 个答案:

答案 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是正常的。