今天在写一个 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。