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 allow_url_include的应用和解释
Apr 22 PHP
PHP数据库链接类(PDO+Access)实例分享
Dec 05 PHP
二进制交叉权限微型php类分享
Feb 07 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
Apr 30 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 PHP
yii2中的rules 自定义验证规则详解
Apr 19 PHP
PHP基于swoole多进程操作示例
Aug 12 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 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 多维数组排序实现代码
2009/08/05 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
AngularJS实现元素显示和隐藏的几个案例
2015/12/09 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
python实现祝福弹窗效果
2019/04/07 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
Python socket服务常用操作代码实例
2020/06/22 Python
柯基袜:Corgi Socks
2017/01/26 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
检举信的格式及范文
2014/04/04 职场文书
听课评语大全
2014/04/30 职场文书
销售提升方案
2014/06/07 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python