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 相关文章推荐
PHP通用检测函数集合
Nov 25 PHP
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
php短域名转换为实际域名函数
Jan 17 PHP
PHP中的函数嵌套层数限制分析
Jun 13 PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
8个必备的PHP功能开发
Oct 02 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
Laravel推荐使用的十个辅助函数
May 10 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
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
jquery ready()的几种实现方法小结
2010/06/18 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
js最全的数组的降维5种办法(小结)
2020/04/28 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
Python中的pass语句使用方法讲解
2015/05/14 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
Footshop法国:购买运动鞋
2020/01/19 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
同学聚会主持词
2014/03/18 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
初中班长竞选稿
2015/11/20 职场文书
用python画城市轮播地图
2021/05/28 Python
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python