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

 1if(!isset($_COOKIE['card_user'])){
 2    setcookie("card_user", $_SERVER['REMOTE_ADDR'] , time()+60*60*24);
 3    setcookie("card_user_time", 1 , time()+60*60*24);
 4}else{
 5    if( $_COOKIE["card_user"] == $_SERVER['REMOTE_ADDR'] ){
 6        if( $_COOKIE['card_user_time'] > $config['max'] ){
 7            $isMax = true;
 8        }else{
 9            setcookie("card_user_time", $_COOKIE['card_user_time']+1);
10        }
11    }else{
12        setcookie("card_user", $_SERVER['REMOTE_ADDR'] , time()+60*60*24);
13        setcookie("card_user_time", 1 , time()+60*60*24);
14    }
15}

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

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

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

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

总结:

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