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下实现折线图效果的代码
Apr 28 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
php需登录的文件上传管理系统
Mar 21 PHP
Yii框架上传图片用法总结
Mar 28 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 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
用文本作数据处理
2006/10/09 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
js匿名函数使用&amp;传参(实例)
2017/09/08 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
Django中url的反向查询的方法
2018/03/14 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
Python中一般处理中文的几种方法
2019/03/06 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
python 如何调用 dubbo 接口
2020/09/24 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
管理站站长岗位职责
2013/11/27 职场文书
领导检查欢迎词
2014/01/14 职场文书
教师读书活动总结
2014/05/07 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
英语感谢信范文
2015/01/20 职场文书
作弊检讨书
2015/01/27 职场文书
让生命充满爱观后感
2015/06/08 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏