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 相关文章推荐
ajax php 实现写入数据库
Sep 02 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
php快递单号查询接口使用示例
May 05 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
php数组转成json格式的方法
Mar 09 PHP
使用Thinkphp框架开发移动端接口
Aug 05 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 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+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
大学生活动策划方案
2014/02/10 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
专家推荐信范文
2015/03/26 职场文书
预备党员群众意见
2015/06/01 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
PyQt5实现多张图片显示并滚动
2021/06/11 Python
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android