在函数中检查和设置cookie

时间:2013-04-24 10:13:44

标签: php cookies setcookie

我写了一个函数,检查是否设置了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;
}

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

检查isset返回的内容。从您的描述看来,在首次执行此代码后,根本没有设置cookie。在FireFox中如果使用firebug工具设置cookie,您可以选择。

一个好主意是比较if的任何if(isset($some_var) === true){代替if(isset($some_Var)){的数据类型。请记住:

$v = 0;

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

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

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

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