Php setcookie()在第一次访问页面时将$\u COOKIE设置为零

Php setcookie()在第一次访问页面时将$\u COOKIE设置为零,php,cookies,browser,setcookie,Php,Cookies,Browser,Setcookie,我在php页面中有以下代码: if(!isset($_COOKIE[$cookie_name])) { if(!setcookie($cookie_name, mt_rand(), time() + (86400 * 30), "/")) { die("[ERROR COOKIE] Failed to set cookie!"); } } 如果第一次加载页面时浏览器中没有设置任何cookie,$\u cookie[$cookie\u name]设置为0。之后,如

我在php页面中有以下代码:

if(!isset($_COOKIE[$cookie_name])) {
    if(!setcookie($cookie_name, mt_rand(), time() + (86400 * 30), "/")) {
        die("[ERROR COOKIE] Failed to set cookie!");
    }
}
如果第一次加载页面时浏览器中没有设置任何cookie,
$\u cookie[$cookie\u name]
设置为
0
。之后,如果我重新加载页面,它将被设置为预期的随机数

到目前为止,我只是做了一个如下的变通方法:

if(!isset($_COOKIE[$cookie_name])) {
    if(!setcookie($cookie_name, mt_rand(), time() + (86400 * 30), "/")) {
        die("[ERROR COOKIE] Failed to set cookie!");
    }
    if($_COOKIE[$cookie_name] == 0) {
        echo "<meta http-equiv=\"refresh\" content=\"0; url=./\" />";
        die();
    }
}
if(!isset($\u COOKIE[$COOKIE\u name])){
如果(!setcookie($cookie\u name,mt\u rand(),time()+(86400*30),“/”){
骰子(“[错误COOKIE]设置COOKIE失败!”);
}
如果($\u COOKIE[$COOKIE\u name]==0){
回声“;
模具();
}
}

但我想了解的是,为什么第一次setcookie()默认为
0

它没有。它默认为
NULL
,因为它尚未设置

setcookie
仅将
setcookie
标题添加到要发送到浏览器的标题列表中。它是
标题(“设置Cookie:…”)的便捷快捷方式为您执行格式设置。它不会修改
$\u COOKIE
超全局

当然,你可以自己做:

function updatecookie($name,$val,$exp=0,$path="/",$domain="",$secure=false,$httponly=false) {
    $ret = setcookie($name,$val,$exp,$path,$domain,$secure,$httponly);
    if( $ret) $_COOKIE[$name] = $val;
    return $ret;
}

你第一次是怎么检查的?
$\u COOKIE
superglobal在重新加载后才会从
setcookie()
获取新值。这是意料之中的。是的,我以为$\u COOKIE[$name]是在调用setcookie()后设置的,但现在,感谢您的回复,我了解$\u COOKIE[$name]从浏览器获取保存的COOKIE。