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空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
Laravel 5框架学习之表单
Apr 08 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
PHP实现支付宝即时到账功能
Dec 21 PHP
Laravel 实现密码重置功能
Feb 23 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 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 Undefined index和Undefined variable的解决方法
2008/03/27 PHP
php5 图片验证码实现代码
2009/12/11 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
php获取微信openid方法总结
2019/10/10 PHP
ie 调试javascript的工具
2009/04/29 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
对python中dict和json的区别详解
2018/12/18 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
用python写爬虫简单吗
2020/07/28 Python
python获取整个网页源码的方法
2020/08/03 Python
Python实现自动签到脚本功能
2020/08/20 Python
python之语音识别speech模块
2020/09/09 Python
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
美团网旗下网上订餐平台:美团外卖
2020/03/05 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
工程质量保证书
2015/05/09 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS