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 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
php代码书写习惯优化小结
Jun 20 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
php里array_work用法实例分析
Jul 13 PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
php中访问修饰符的知识点总结
Jan 27 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多线程并发实现方法
2016/09/30 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
python 使用get_argument获取url query参数
2017/04/28 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
2018/04/28 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
python中二分查找法的实现方法
2020/12/06 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
Java servlet面试题
2012/03/04 面试题
自主招生自荐信范文
2013/12/04 职场文书
怎么写工作检讨书
2014/11/16 职场文书
大一学生个人总结
2015/02/15 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
Python+Appium新手教程
2021/04/17 Python
python 中[0]*2与0*2的区别说明
2021/05/10 Python
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
Python echarts实现数据可视化实例详解
2022/03/03 Python