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中cookies使用指南
Mar 16 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
PHP遍历并打印指定目录下所有文件实例
Feb 10 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
Nov 09 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 PHP
PHP实现验证码校验功能
Nov 16 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
phpstorm激活码2020附使用详细教程
Sep 25 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 Token(令牌)设计
2008/03/15 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
vue自定义组件实现双向绑定
2021/01/13 Vue.js
python下如何让web元素的生成更简单的分析
2008/07/17 Python
python中stdout输出不缓存的设置方法
2014/05/29 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
小小聊天室Python代码实现
2016/08/17 Python
Python+django实现简单的文件上传
2016/08/17 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
python range实例用法分享
2020/02/06 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
HTML5通用接口详解
2016/06/12 HTML / CSS
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
用JS实现飞机大战小游戏
2021/06/09 Javascript
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS