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 相关文章推荐
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
PHP读取xml方法介绍
Jan 12 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
PHP实现字符串的全排列详解
Apr 24 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 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 max_execution_time执行时间问题
2011/07/17 PHP
PHP内核探索:变量概述
2014/01/30 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP内核探索之变量
2015/12/22 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
python shell根据ip获取主机名代码示例
2017/11/25 Python
Python random模块用法解析及简单示例
2017/12/18 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
什么是Python包的循环导入
2020/09/08 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
新郎婚礼答谢词
2015/01/04 职场文书
初中班主任工作随笔
2015/08/15 职场文书
聘任通知书
2015/09/21 职场文书
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
tomcat下部署jenkins的方法
2022/05/06 Servers