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 相关文章推荐
使用eAccelerator加密PHP程序
Oct 03 PHP
php 应用程序安全防范技术研究
Sep 25 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
laravel 多图上传及图片的存储例子
Oct 14 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 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入门源程序
2006/10/09 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
php设计模式之委托模式
2016/02/13 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
Javascript常考语句107条收集
2010/03/09 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
Django 限制访问频率的思路详解
2019/12/24 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
24个canvas基础知识小结
2014/12/17 HTML / CSS
美国Max仓库:Max Warehouse
2020/05/31 全球购物
产品销售计划书
2014/05/04 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
会议欢迎词范文
2015/01/27 职场文书
学校开除通知书
2015/04/25 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
MySQL 条件查询的常用操作
2022/04/28 MySQL