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+oracle 分页类
Oct 09 PHP
PHP 高手之路(二)
Oct 09 PHP
给初学PHP的5个入手程序
Nov 23 PHP
PHP 编程安全性小结
Jan 08 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
thinkphp数据查询和遍历数组实例
Nov 28 PHP
php使用PDO方法详解
Dec 27 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 PHP
通过代码实例解析PHP session工作原理
Dec 11 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
xml+php动态载入与分页
2006/10/09 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
JavaScript 常用函数
2009/12/30 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
javascript时间差插件分享
2016/07/18 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
Python正则表达式指南 推荐
2018/10/09 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
盛大笔试题
2016/11/05 面试题
房屋转让协议书范本
2014/04/11 职场文书
临时租车协议范本
2014/09/23 职场文书
投诉书格式范本
2015/07/02 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
Kubernetes控制节点的部署
2022/04/01 Servers