php中防止恶意刷新页面的代码小结


Posted in PHP onOctober 31, 2012

防止恶意刷页面的原理是

要求在页面间传递一个验证字符串,
在生成页面的时候 随机产生一个字符串,
做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。

点连接或者表单进入页面后,判断session中的验证码是不是与用户提交的相同,如果相同,则处理,不相同则认为是重复刷新。
在处理完成后将重新生成一个验证码,用于新页面的生成

代码

<?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>

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

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>
PHP 相关文章推荐
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
15种PHP Encoder的比较
Mar 06 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
php实现搜索类封装示例
Mar 31 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
Sep 30 PHP
利用PHP生成静态HTML文档的原理
Oct 29 #PHP
PHP学习笔记 IIS7下安装配置php环境
Oct 29 #PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 #PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 #PHP
PHP daddslashes 使用方法介绍
Oct 26 #PHP
Zend Studio去除编辑器的语法警告设置方法
Oct 24 #PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Oct 24 #PHP
You might like
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
PHP实现货币换算的方法
2014/11/29 PHP
jQuery对象[0]是什么含义?
2010/07/31 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
Python实现网站注册验证码生成类
2017/06/08 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python实现按行分割文件
2019/07/22 Python
Python 变量的创建过程详解
2019/09/02 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
小学防溺水制度
2014/01/29 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
春游踏青活动方案
2014/08/14 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书