php cookie实现计数时要注意的问题

今天在写一个 IP+cookie 限制客户断重复刷新的时候,遇到一个问题。


    if(!isset($_COOKIE['card_user'])){
        setcookie("card_user", $_SERVER['REMOTE_ADDR'] , time()+60*60*24);
        setcookie("card_user_time", 1 , time()+60*60*24);
    }else{
        if( $_COOKIE["card_user"] == $_SERVER['REMOTE_ADDR'] ){
            if( $_COOKIE['card_user_time'] > $config['max'] ){
                $isMax = true;
            }else{
                setcookie("card_user_time", $_COOKIE['card_user_time']+1);
            }
        }else{
            setcookie("card_user", $_SERVER['REMOTE_ADDR'] , time()+60*60*24);
            setcookie("card_user_time", 1 , time()+60*60*24);
        }
    }


在使用上面代码的时候,不关闭浏览器正常,关闭浏览器后发现,又可以再刷新了,

最后发现一个问题,同一IP在实现计数器的时候,没给cookie加上过期时间,浏览器一关闭就失效了。

纠结了好久的问题终于得到解决,修改后的代码如下,测试正常。

	setcookie("card_user_time", $_COOKIE['card_user_time']+1 , time()+60*60*24);

总结:

对于php cookie这个东西,不能update,只能重新赋值,并且一定别忘记,加个lifetime。

添加新评论