php防止恶意刷新与刷票的方法


Posted in PHP onNovember 21, 2014

本文实例讲述了php防止恶意刷新与刷票的方法。分享给大家供大家参考。具体实现方法如下:

一般来说,恶意刷新就是不停的去刷新提交页面,导致出现大量无效数据,下面我们来总结一下php 防止恶意刷新页面方法总结。

防止恶意刷页面的原理是:

要求在页面间传递一个验证字符串,
在生成页面的时候 随机产生一个字符串,
做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。
点连接或者表单进入页面后,判断session中的验证码是不是与用户提交的相同,如果相同,则处理,不相同则认为是重复刷新。
在处理完成后将重新生成一个验证码,用于新页面的生成

PHP实现代码如下:

<?php 

session_start(); 

$k=$_GET['k']; 

$t=$_GET['t']; 

$allowTime = 1800;//防刷新时间 

$ip = get_client_ip(); 

$allowT = md5($ip.$k.$t); 

if(!isset($_SESSION[$allowT])) 

{ 

$refresh = true; 

$_SESSION[$allowT] = time(); 

}elseif(time() - $_SESSION[$allowT]>$allowTime){ 

$refresh = true; 

$_SESSION[$allowT] = time(); 

}else{ 

$refresh = false; 

} 

?>

ie6提交两次我也碰到过,大致是用图片代替submit时,图片上有个submit(),这样会提交两次,如果只是submit钮我没碰到过提交两次的情况。 现在整理一下:
方法基本上前面几位说得差不多

接收的页即2.php分为两部分,一部分处理提交过来的变量,一部分显示页面
处理变量完毕用header( "location: ".$_SERVER[ 'PHP_SELF '])跳转到自身页
本部分要做判断,如果没有post的变量就跳过。当然也可以跳到别的页面。
跳到别的页面返回时会有问题,建议做在一个php文件里。

如果上页穿过来得变量不符合要求可以强制返回 <script> history.go(-1); </script>

只说了一下大体思路,也许高手们不会遇到此类问题,可是并不是每个人都是高手。

if(isset($_POST)) 

{  

if(变量不符合要求) 

<script> history.go(-1); </script> 

else 

//操作数据 

... 

if(操作完成) 

header( "location: ".$_SERVER[ 'PHP_SELF ']); 

} 

<script language= "JavaScript "> 

<!-- 

 javascript:window.history.forward(1); 

//--> 

</script>

也可以利用COOKIE
<?php

$c_file="counter.txt"; //文件名赋值给变量

if(!file_exists($c_file)) //如果文件不存在的操作

{

$myfile=fopen($c_file,"w"); //创建文件

fwrite($myfile,"0"); //置入“0”

fclose($myfile); //关闭文件

}

$t_num=file($c_file); //把文件内容读入变量

if($_COOKIE["date"]!="date(Y年m月d日)") //判断COOKIE内容与当前日期是否一致

{

$t_num[0]++; //原始数据自增1

$myfile=fopen($c_file,"w"); //写入方式打开文件

fwrite($myfile,$t_num[0]); //写入新数值

fclose($myfile); //关闭文件

//重新将当前日期写入COOKIE并设定COOKIE的有效期为24小时

setcookie("date","date(Y年m月d日)",time()+60*60*24);

}

?>

利用session:
主页面文件 index.php 代码:
<?php

session_start();

?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>通过session禁止页面刷新</title>

<style type="text/css">

<!--

.style1 {

font-size: 14px;

font-family: "华文仿宋";

font-weight: bold;

}

.style2 {font-family: "华文琥珀"}

-->

</style>

</head>

<body>

<?php

//使用文本存储数据

   if($_SESSION[temp]==""){

   if(($fp=fopen("counter.txt","r"))==false){ 

   echo "打开文件失败!";

     }else{ $counter=fgets($fp,1024);   //读取文件中数据

     fclose($fp);                        //关闭文本文件

     $counter++;                         //计数器增加1

     $fp=fopen("counter.txt","w");       //以写的方式打开文本文件

  

     fputs($fp,$counter);                //将新的统计数据增加1

     fclose($fp);    }                   //关闭文

//从文本文件中读取统计数据

       if(($fp=fopen("counter.txt","r"))==false){

       echo "打开文件失败!";

       }else{

        $counter=fgets($fp,1024);

        fclose($fp);

           echo "数字计数器: " .$counter ;

    }   //输出访问次数

     $_SESSION[temp]=1; //登录以后,$_SESSION[temp]的值不为空,给$_SESSION[temp]赋一个值1

     }else{

     echo "<script>alert('您不可以刷新本页!!'); history.back();</script>";

     }

?>

<table width="300" border="0" cellpadding="0" cellspacing="0" background="images/141.jpg">

<tr>

    <td height="35" align="center"><span class="style1">通过session禁止页面刷新</span></td>

</tr>

<tr>

    <td height="40" align="center"><span class="style2">

      <?php if(($fp=fopen("counter.txt","r"))==false){

      echo "打开文件失败!";

      }else{

        $counter=fgets($fp,1024);

        fclose($fp);

           echo "网页访问量: " .$counter ; 

    }   //输出访问次数

 ?>

    </span></td>

</tr>

<tr>

    <td height="25" align="center"> </td>

</tr>

</table>

</body>

</html>

其中:
counter.txt 文件为同目录下的记录登录数文件。
$counter=fgets($fp,1024);   为读取文件中 数值型值的方法(可包含小数点数值)

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
基于文本的访客签到簿
Oct 09 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
php使用Jpgraph绘制饼状图的方法
Jun 10 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 PHP
vmware linux系统安装最新的php7图解
Apr 14 PHP
php采用curl实现伪造IP来源的方法
Nov 21 #PHP
php文件缓存类汇总
Nov 21 #PHP
php实现事件监听与触发的方法
Nov 21 #PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 #PHP
IIS下PHP的三种配置方式对比
Nov 20 #PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 #PHP
php目录遍历函数opendir用法实例
Nov 20 #PHP
You might like
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
js 窗口抖动示例
2013/09/04 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
Python中的类学习笔记
2014/09/23 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python面向对象之Web静态服务器
2019/09/03 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
秋季运动会稿件
2014/01/30 职场文书
初中生期末评语大全
2014/04/24 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
物业公司管理制度
2015/08/05 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
宝塔更新Python及Flask项目的部署
2022/04/11 Python
python如何将mat文件转为png
2022/07/15 Python