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调用数据库的存贮过程!
Oct 09 PHP
给初学PHP的5个入手程序
Nov 23 PHP
php实现的MySQL通用查询程序
Mar 11 PHP
将数组写入txt文件 var_export
Apr 21 PHP
PHP通过session id 实现session共享和登录验证的代码
Jun 03 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
PHP实现基于状态的责任链审批模式详解
May 31 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
linux下为php添加iconv模块的方法
2016/02/28 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
浅谈python迭代器
2017/11/08 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
python绘图模块之利用turtle画图
2021/02/12 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
销售口号大全
2014/06/11 职场文书
办理收楼委托书范本
2014/10/09 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
监考失职检讨书
2015/01/26 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers