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