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如何透过ODBC来存取数据库
Oct 09 PHP
PHP安全配置
Dec 06 PHP
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
有关PHP性能优化的介绍
Jun 20 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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
针对初学PHP者的疑难问答(2)
2006/10/09 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
Javascript动画的实现原理浅析
2015/03/02 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
angularJS开发注意事项
2018/05/26 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
Python批量修改文件后缀的方法
2014/01/26 Python
python多重继承实例
2014/10/11 Python
python计算文本文件行数的方法
2015/07/06 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
Python3分析处理声音数据的例子
2019/08/27 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
网络程序员自荐信
2014/01/25 职场文书
开学典礼决心书
2014/03/11 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
酒店员工培训方案
2014/06/02 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript