`

php 重复提交 刷新 直接访问

    博客分类:
  • php
 
阅读更多
防止直接访问PHP页面,只能引用!
A页面:
Java代码收藏代码
  1. define('INIT_PHPV',true);//定义INIT_PHPV为true
  2. require'b.php';//引用b页面
B页面:
Java代码收藏代码
  1. !defined('INIT_PHPV')&&die('非法操作!请与管理员联系!');
这样就不能直接访问B页面了。也可以在A加COOKIE,B判断COOKIE后用完删掉COOKIE
 
防止刷新模块
所以就考虑增加一个参数来防止这类情况的发生,COOKIE和SESSION可供选择,不过 COOKIE是客户端的,如果人家禁用COOKIE的话,照样可以恶意刷新点击数。还是用SESSION的好,IP+URL参数的MD5值做 SESSION名,我想大家也不好伪造了吧.
实现原理 设置 max_reloadtime =100; //设置页面刷新最长间隔时间
用户第一次打开页面 记录当前的时间保存在 session_start
用户第二次打开页面(判断 session_start是否存在) 用当前时间和 session_start 相减 得到差值 time_passed
当 time_passed < max_reloadtime 表示用户在指定时间内频繁刷新了 警告后直接退出
Java代码收藏代码
  1. <?php
  2. session_start();
  3. $k=$_GET['k'];
  4. $t=$_GET['t'];
  5. //防刷新时间
  6. $allowTime=1800;
  7. $ip=get_client_ip();
  8. $allowT=md5($ip.$k.$t);
  9. if(!isset($_SESSION[$allowT])){
  10. $refresh=true;
  11. $_SESSION[$allowT]=time();
  12. }elseif(time()-$_SESSION[$allowT]>$allowTime){
  13. $refresh=true;
  14. $_SESSION[$allowT]=time();
  15. }else{
  16. $refresh=false;
  17. }
  18. ?>

防重复提交

首先,我们可以定义一个session变量用来保存一个表单的提交序列号。这里我定义为“$userLastAction”。然后在表单里加入一个 hidden变量,把值设为$userLastAction+1:
<input type=Hidden name=lastAction value=<? =$userLastAction+1 ?>>
最后,在处理提交之前判断表单是否已被提交过:
if($lastAction>$userLastAction and inputIsValid(…)){
$userLastAction++; // 序列号加1
// 处理表单数据
}


Java代码收藏代码
  1. 提交页面:
  2. <?
  3. $_SESSION['code']=mt_rand(1,1000);//生成1到1000之间的随机器数
  4. ?>
  5. <form>
  6. <inputtype="hidden"name="scode"value="<?phpecho$_SESSION['code']?>"/>
  7. </form>
  8. 被提交页面:
  9. if($_SESSION['code']!=$_REQUEST['scode']){
  10. echo"请不要重复提交";
  11. exit;
  12. }
  13. $_SESSION['code']=0

 

Java代码收藏代码
  1. <?php
  2. /*改进版
  3. PHP防止用户刷新页面(RefreshorReload),重复提交表单内容。
  4. 由于表单变量的内容由$_POST['name']引用,也许在处理完表单后,直接将$_POST['name']销毁(unset())即可。其实不然。可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST['name'],刷新后,$_POST['name']还是会被赋值,一样有效。
  5. 可利用Session解决。首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session的值,如果不是400,就不再处理表单中的数据。
  6. 可设置Session的有效时间?
  7. */
  8. if(isset($_POST['action'])&&$_POST['action']==’submitted’){
  9. session_start();
  10. isset($_SESSION['num'])ordie("nosession");
  11. if($_SESSION['num']==400){
  12. print‘<pre>’;
  13. print_r($_POST);
  14. print‘<ahref="’.$_SERVER['PHP_SELF'].’">Pleasetryagain</a>’;
  15. print‘</pre>’;
  16. $_SESSION['num']=500;
  17. }else{
  18. print‘<pre>’;
  19. print_r($_POST);
  20. echo"Howeveryouhavesubmitted";
  21. print‘</pre>’;
  22. }
  23. }else{
  24. session_start()ordie("sessionisnotstarted");
  25. $_SESSION['num']=400;
  26. ?>
  27. <formaction="<?phpecho$_SERVER['PHP_SELF'];?>"method="POST">
  28. Name:<inputtype="text"name="personal[name]"><br>
  29. Email:<inputtype="text"name="personal[email]"><br>
  30. Beer:<br>
  31. <selectmultiplename="beer[]">
  32. <optionvalue="warthog">Warthog</option>
  33. <optionvalue="guinness">Guinness</option>
  34. <optionvalue="stuttgarter">StuttgarterSchwabenbr</option>
  35. </select><br>
  36. <inputtype="hidden"name="action"value="submitted">
  37. <inputtype="submit"name="submit"value="submitme!">
  38. </form>
  39. <?php
  40. }
  41. ?>
分享到:
评论

相关推荐

    PHP防止刷新重复提交页面的示例代码

    PHP防止刷新重复提交页面的示例代码 作为phper,我们在开发和学习php过程中,难免要经常的接受处理表单数据,然而处理表单的时候总会有一个问题,困扰大家,刷新页面重复提交的问题。如何防止刷新页面重复提交呢? ...

    PHP程序开发范例宝典III

    实例135 使用COOKIE限制用户访问网站的时间 199 5.5 会话控制 201 实例136 通过SESSION判断用户的权限 201 实例137 通过SESSION禁止页面刷新 203 实例138 通过SESSION存储数据 204 实例139 通过SESSION...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 ...

    php+mysql简易口罩限量领取系统-PHP

    刷新本页后更新选项,选择需要导入的数据提交。 第四步 微信端扫码得管理员权限,记得安装写库文件名不要修改 如何追加批次 更新或追加文件到txt文件夹下再次访问本页操作。 文件样表见inc文件夹下的压缩包文件,...

    PHP168建站系统

    比如转移空间后,把备份的数据传到一个新目录,然后在地址栏目输入这个目录的访问地址,即可还原。完全不用进入后台。这对新手来 说,转移空间是非常方便的。 7.当然也自带有数据库管理工具。 E、极其灵活的广告系统...

    xls二维结构数据表转txt数据文本等4小工具集 v1.2.zip

    3. 刷新访问该功能页面,选择新的文件对应的下拉后提交 4. 得到文本内容,稍加处理后得到查询系统可用数据 其他用途(.csv) 将得到的文本内容英文逗号替换为中文逗号 再将文本内容中的制表符替换为逗号即可 用于...

    最新mymps4.0i分类信息4.0i商业版

    【新增】 增加移动互联网手机访问模块 (重要) 【新增】 增加phpwind论坛整合的功能,业界独家整合,双向同步 (重要) 【新增】 增加QQ帐号整合登录的功能 (重要) 【新增】 会员后台增加个人会员自助升级到企业会员...

    PHP168整站|PHP168整站 v4.0下载_源码下载

    比如转移空间后,把备份的数据传到一个新目录,然后在地址栏目输入这个目录的访问地址,即可还原。完全不用进入后台。这对新手来 说,转移空间是非常方便的。 7.当然也自带有数据库管理工具。 E、极其灵活的广告...

    蚂蚁分类信息系统mymps4.0i商业源码破解版

    【改进】 用户刷新信息限制(刷新信息将扣除金币),避免用户每天不停刷新信息来获取靠前位置 【改进】 细化友情链接 内页首页显示功能 【改进】 完善会员登录加积分的功能,避免用户重复登陆来赚取积分 【改进】 ...

    JavaScript网页特效范例宝典源码

    实例080 防止表单重复提交 124 实例081 自动提交表单 125 实例082 通过for循环获取表单元素的中文名称 126 实例083 可以提交到不同处理页的表单 127 第3章 实用JavaScript函数 129 3.1 数据验证 130 实例084 通过...

    UWA 2.X 通用建站系统 v2.1.0

    [增强]修复表单提交时 uploadify 是否正在上传附件判断 [增强]一键更新 [修正]修复地址拼装函数Url::U() [增强]完善缓存清除记录,优化缓存清除过程 [修正]完善会员中心档案链接预览 [修正]完善上传类AUpload获取...

    蚂蚁分类信息系统

    支持手机端支付宝在线充值3,支持手机端微信在线充值4,支持微信登录,微信公众号绑定5,支持手机发送验证码6,手机信息列表展示·无分页上拉刷新7,负载强,易维护,易拓展,程序和模板完全分离8,增加百度提交网站...

    ExtAspNet_v2.3.2_dll

    -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加...

Global site tag (gtag.js) - Google Analytics