0

我编写了一个函数来检查是否设置了 cookie,如果未设置则设置 cookie。

因为 cookie 不能立即使用,所以我需要刷新一次页面,所以我可以访问该值。

但是,当我调用该函数时,它只会不断重新加载页面。在功能之外时,它可以正常工作。只有当它在函数内部并且我调用它时才会发生。

function getCookie (){
    if(isset($_COOKIE['ID'])){
        $cookieID = $_COOKIE['ID'];
    }
    else{
        //generate random value for cookie id
        $charid = strtoupper(md5(uniqid(rand(), true)));
        $uuid =  substr($charid, 0, 8)
                 .substr($charid,20,12);

        setcookie( "ID", $uuid, strtotime( '+7 days' ) ); 
        $cookieID = $_COOKIE['ID'];
        echo "<META HTTP-EQUIV='Refresh' CONTENT='0'>  ";
    }
    echo $cookieID;
}
4

2 回答 2

2

这是一个工作的php页面......

<?php

function getCookie (){
    if(isset($_COOKIE['ID'])){
        $cookieID = $_COOKIE['ID'];
    }
    else{
        //generate random value for cookie id
        $charid = strtoupper(md5(uniqid(rand(), true)));
        $uuid =  substr($charid, 0, 8)
                 .substr($charid,20,12);

        setcookie( "ID", $uuid, strtotime( '+7 days' ) ); 
        $cookieID = $_COOKIE['ID'];

        //just assign the cookie the value as if it was in the header. 
        //no refresh needed.
        $_COOKIE['ID'] = $uuid;

    }
}

?>
<html>
<body>
<?php 
  getCookie();
  echo $_COOKIE['ID']; 
?>
</body>
</html>
于 2013-04-24T10:21:10.900 回答
0

检查 excaclyisset返回的内容。从您的描述看来,在第一次执行此代码后根本没有设置 cookie。在 FireFox 中,您可以检查是否使用firebug工具设置了 cookie。

一个好主意是比较任何类型的数据,if例如,if(isset($some_var) === true){而不是if(isset($some_Var)){. 请记住:

$v = 0;

if($v == 0){ } 返回真

if($v === 0){ }返回真

if($v == false){ }返回真

if($v === false){ }返回假

于 2013-04-24T10:29:56.377 回答