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产生动态的影像图
Oct 09 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
PHP基础知识回顾
Aug 16 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
thinkPHP自动验证机制详解
Dec 05 PHP
PHP7多线程搭建教程
Apr 21 PHP
ThinkPHP删除栏目(实现批量删除栏目)
Jun 21 PHP
php获取'/'传参的值简单方法
Jul 13 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 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实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
php二维码生成以及下载实现
2017/09/28 PHP
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
处理Python中的URLError异常的方法
2015/04/30 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
Python常用编译器原理及特点解析
2020/03/23 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
环境科学专业大学生自荐信格式
2013/09/21 职场文书
经典优秀个人求职信分享
2013/12/12 职场文书
经典演讲稿开场白
2014/08/25 职场文书
会计师事务所实习证明
2014/11/16 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
资料员岗位职责范本
2015/04/13 职场文书
员工考勤管理制度
2015/08/06 职场文书
Go归并排序算法的实现方法
2022/04/06 Golang