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 删除无限级目录与文件代码共享
Nov 22 PHP
QQ登录 PHP OAuth示例代码
Jul 20 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
Jan 06 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
php实现中文转数字
Feb 18 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
如何用Laravel包含你自己的帮助函数
May 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
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
php实现粘贴截图并完成上传功能
2015/05/17 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
微笑服务标语
2014/06/24 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers