`

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. ?>
分享到:
评论

相关推荐

    thinkphp3.2 防止表单重复提交

    这样可以防止用户因为刷新页面而导致的重复提交。 表单令牌的实现原理是:在用户首次访问表单页面时,服务器生成一个唯一的令牌并存储在session或cookie中,同时将该令牌以隐藏字段的形式发送给浏览器。当表单提交...

    PHP防止post重复提交数据的简单例子

    这个方法的一个潜在问题是,如果用户直接访问提交页面(跳过了表单页面),可能会导致授权码缺失,从而无法正常提交。为了解决这个问题,可以在表单页面之外的其他地方初始化授权码,或者在提交页面上进行更严格的...

    解决php表单重复提交实现方法

    在Web开发中,表单重复提交是一个常见的问题,可能导致数据的冗余或者错误。这个问题可以通过多种方式解决,其中一种常用的方法就是结合JavaScript和PHP来防止。本文将详细讲解如何使用PHP来防止表单的重复提交。 ...

    PHP防止表单重复提交的几种常用方法汇总

    这种方法可以防止浏览器前进/后退按钮引发的重复提交问题,但不能防止用户手动输入URL再次访问表单页面。 3. **使用Session存储临时标识**: 在表单加载时,服务器端生成一个唯一的会话ID,并将其存储在隐藏的...

    php采用session实现防止页面重复刷新

    在PHP开发中,页面重复提交和刷新是一个常见的问题。用户可能会多次点击提交按钮或者刷新页面,这可能会导致数据库的重复数据插入、服务器资源的浪费,或者在某些业务场景中引起安全问题。为了解决这一问题,可以...

    php环境下利用session防止页面重复刷新的具体实现

    在PHP环境中,防止页面重复刷新是一项重要的功能,它有助于避免用户意外或恶意地多次提交表单数据,导致服务器资源的浪费或数据的错误处理。在本文中,我们将深入探讨如何利用PHP的session机制来实现这一目标。 ...

    php防止CC攻击代码 php防止网页频繁刷新

    这种方法可以通过限制重复提交来防止无意义的频繁刷新和请求。 3. 防止网页频繁刷新的PHP代码实现: 提供的PHP代码实现了一个简单的防止页面在3秒内刷新超过5次的功能。原理是使用session记录页面最后一次访问的...

    PHP简单留言板单页php源码-简单留言板代码

    【PHP简单留言板单页php源码】是一种基于PHP语言实现的简单在线交流工具,它允许用户在...在学习过程中,还可以考虑增强功能,比如添加用户身份验证、防止重复提交、优化界面设计等,以使这个简单的留言板更加完善。

    php实现的密码登录网站

    在登录场景中,它允许用户在提交表单后无需等待页面刷新,就能看到验证结果,提供更好的用户体验。 在"php实现的密码登录网站"项目中,核心流程如下: 1. **HTML表单**:登录页面通常包含一个HTML表单,包括用户名...

    php实现保存submit内容之后禁止刷新

    若该值等于1,说明数据已经成功保存,此时页面上显示的提交按钮将被禁用,避免用户重复提交。具体代码为`if($_GET[inserted]!=1){?新規登録" name="insertN" class="box1a"&gt;&lt;/input&gt; }else{?新規登録" name="insertN...

    php+ajax 许愿墙+代码

    在许愿墙项目中,PHP的主要职责是接收用户提交的愿望,验证数据,存储到数据库,并可能处理其他后台逻辑,如防止重复提交,检查权限等。 2. **AJAX原理** AJAX(Asynchronous JavaScript and XML)是一种创建动态...

    php防止恶意刷新与刷票的方法

    在PHP开发中,防止恶意刷新和刷票是一个重要的安全措施,因为这可以帮助避免无效数据的产生,保护服务器资源,以及确保投票或数据提交的公正性。以下是一些防止恶意刷新和刷票的方法: 1. **使用验证码(CAPTCHA)*...

    PHPWEB手机版V1.0(自动同步数据)

    此版本的亮点在于自动同步数据功能,这意味着无论是网页端还是移动端,用户的数据都能保持实时同步,无需手动刷新或重复操作。这大大提升了用户体验,使得PHPWEB系统在移动互联网时代的适应性得到增强。 综上所述,...

    基于PHP的-MySQL-Ajax投票控件DraconAjaxPoll源码.zip

    - 性能优化:合理设计数据库索引,减少不必要的查询,以及缓存常访问数据,提高系统响应速度。 总结,DraconAjaxPoll是一个利用PHP、MySQL和Ajax技术构建的投票系统,实现了无刷新的投票体验。通过学习和使用这个...

    php防止网站被刷新的方法汇总

    这种方法可以防止简单的重复提交,但可能不适用于复杂的攻击场景。 3. **独立文件调用**: 在WordPress或其他网站中,为了方便管理和维护,可以将防刷新代码放入一个单独的PHP文件,如`forbiddenCC.php`,然后在每...

    PHP实例开发源码-Flash PHP 投票系统.zip

    8. **响应式设计**:考虑到不同设备的访问,投票系统的前端可能采用了响应式设计,以适应不同屏幕大小的设备,如手机和平板电脑。 9. **文件组织**:一个完整的PHP项目通常包含多个文件和目录,如PHP脚本、样式表、...

    php 完整投票系统

    PDO(PHP Data Objects)是PHP提供的一个数据库访问抽象层,它提供了一种标准的方法来连接和操作各种数据库,增强了安全性并提高了性能。 **数据库设计**是构建投票系统的基石。首先,我们需要创建一个或多个数据库...

    PHP实例开发源码—PHP人物图片在线评选投票系统.zip

    4. **表单处理与验证**:用户投票通常通过HTML表单提交,PHP负责处理这些表单数据,包括验证投票的有效性(防止重复投票或恶意攻击)。 5. ** sessions 和 cookies**:为了跟踪用户投票状态,系统可能使用PHP的...

    php+mysql投票系统

    PHP通过AJAX(异步JavaScript和XML,现在多用JSON)与后端通信,获取或提交数据,而不刷新整个页面。 5. **投票逻辑**:在后端,PHP处理投票逻辑,比如检查用户是否已投过票,防止重复投票。它会根据用户的选择更新...

Global site tag (gtag.js) - Google Analytics