登录  /  注册

PHP利用session与cookies防重复提交实例_PHP教程

php中文网
发布: 2016-07-13 10:43:46
原创
912人浏览过

在网页开发中防止重复提交是一个比较实用并且也常用碰到的问题了,除了我们可以直接在数据库查询用户是否提交相同数据进行过滤外,我们还可以在用户提交数据时就防止这类事情发现,下面我来介绍基于session与cookies防重复提交一些基于实现方法。

防止刷新或再交提交

所以就考虑增加一个参数来防止这类情况的发生,COOKIE和SESSION可供选择,不过 COOKIE是客户端的,如果人家禁用COOKIE的话,照样可以恶意刷新点击数。还是用SESSION的好,IP+URL参数的MD5值做 SESSION名
实现原理 设置 max_reloadtime =100; //设置页面刷新最长间隔时间
用户第一次打开页面 记录当前的时间保存在 session_start
用户第二次打开页面(判断 session_start是否存在) 用当前时间和 session_start 相减 得到差值 time_passed
当 time_passed

 代码如下 复制代码

    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; 
    } 
    ?>  


防表单重复提交

 代码如下 复制代码

      /* 改进版
    PHP防止用户刷新页面(Refresh or Reload),重复提交表单内容。
    由于表单变量的内容由$_POST['name']引用,也许在处理完表单后,直接将$_POST['name']销毁(unset())即可。其实不然。可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST['name'],刷新后,$_POST['name']还是会被赋值,一样有效。  
    可利用Session解决。首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session 的值,如果不是400,就不再处理表单中的数据。
    可设置Session的有效时间?   
    */ 
    if (isset($_POST['action']) && $_POST['action'] == ’submitted’) {      
         session_start();      
         isset($_SESSION['num']) or die ("no session");      
         if ($_SESSION['num']==400){      
                 print ‘

’;       <br>
                 print_r($_POST);       <br>
                 print ‘<a href="%E2%80%99.%20%24_SERVER%5B'PHP_SELF'%5D%20.%E2%80%99">Please try again</a>’;       <br>
                 print ‘
登录后复制
’;      
                 $_SESSION['num']=500;      
         } else {      
                 print ‘
’;       <br>
                 print_r($_POST);       <br>
                 echo "However you have submitted";       <br>
                 print ‘
登录后复制
’;      
         }      
    } else {      
         session_start() or die("session is not started");      
         $_SESSION['num']= 400;       
    ?>     
   
     
    Name:
     
    Email:
     
    Beer:
     
   
     
         
         
   
     
        }      
    ?> 


例,一个基于smarty演示版

 代码如下 复制代码


$code = mt_rand(0,1000000);
setcookie('addtips',$code,time()+300);
if(isset($_POST['submit']) ){    
if($_COOKIE['addtips']!= $_POST['code']){            
  echo "请不要刷新本页面或重复提交表单";
exit();
}
}
$smarty->assign('code',$code);

10./////防止表单重复提交

在tpl模板中

 

 代码如下 复制代码

1.

/*利用PHP的Session功能,也能避免PHP表单重复提交。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交
*/


  session_start();//根据当前SESSION生成随机数  
  $code = mt_rand(0,1000000);  
   $_SESSION['code'] = $code;  
//在表单中隐藏传递:
   ">

//在接收页代码如下:


 session_start();  
  if(isset($_POST['originator'])) {  
   if($_POST['originator'] ==
   $_SESSION['code']){  
   // 处理该表单的语句,省略  
  }else{  
   echo ‘请不要刷新本页面或
   重复提交表单!’;  
  }  
  }

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/633153.htmlTechArticle在网页开发中防止重复提交是一个比较实用并且也常用碰到的问题了,除了我们可以直接在数据库查询用户是否提交相同数据进行过滤外,...
智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号