防止直接访问PHP页面,只能引用!
A页面:
- define('INIT_PHPV',true);//定义INIT_PHPV为true
- require'b.php';//引用b页面
- !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 表示用户在指定时间内频繁刷新了 警告后直接退出
所以就考虑增加一个参数来防止这类情况的发生,COOKIE和SESSION可供选择,不过 COOKIE是客户端的,如果人家禁用COOKIE的话,照样可以恶意刷新点击数。还是用SESSION的好,IP+URL参数的MD5值做 SESSION名,我想大家也不好伪造了吧.
实现原理 设置 max_reloadtime =100; //设置页面刷新最长间隔时间
用户第一次打开页面 记录当前的时间保存在 session_start
用户第二次打开页面(判断 session_start是否存在) 用当前时间和 session_start 相减 得到差值 time_passed
当 time_passed < max_reloadtime 表示用户在指定时间内频繁刷新了 警告后直接退出
- <?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;
- }
- ?>
防重复提交
首先,我们可以定义一个session变量用来保存一个表单的提交序列号。这里我定义为“$userLastAction”。然后在表单里加入一个 hidden变量,把值设为$userLastAction+1:
<input type=Hidden name=lastAction value=<? =$userLastAction+1 ?>>
最后,在处理提交之前判断表单是否已被提交过:
if($lastAction>$userLastAction and inputIsValid(…)){
$userLastAction++; // 序列号加1
// 处理表单数据
}
- 提交页面:
- <?
- $_SESSION['code']=mt_rand(1,1000);//生成1到1000之间的随机器数
- ?>
- <form>
- <inputtype="hidden"name="scode"value="<?phpecho$_SESSION['code']?>"/>
- </form>
- 被提交页面:
- if($_SESSION['code']!=$_REQUEST['scode']){
- echo"请不要重复提交";
- exit;
- }
- $_SESSION['code']=0
- <?php
- /*改进版
- PHP防止用户刷新页面(RefreshorReload),重复提交表单内容。
- 由于表单变量的内容由$_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'])ordie("nosession");
- if($_SESSION['num']==400){
- print‘<pre>’;
- print_r($_POST);
- print‘<ahref="’.$_SERVER['PHP_SELF'].’">Pleasetryagain</a>’;
- print‘</pre>’;
- $_SESSION['num']=500;
- }else{
- print‘<pre>’;
- print_r($_POST);
- echo"Howeveryouhavesubmitted";
- print‘</pre>’;
- }
- }else{
- session_start()ordie("sessionisnotstarted");
- $_SESSION['num']=400;
- ?>
- <formaction="<?phpecho$_SERVER['PHP_SELF'];?>"method="POST">
- Name:<inputtype="text"name="personal[name]"><br>
- Email:<inputtype="text"name="personal[email]"><br>
- Beer:<br>
- <selectmultiplename="beer[]">
- <optionvalue="warthog">Warthog</option>
- <optionvalue="guinness">Guinness</option>
- <optionvalue="stuttgarter">StuttgarterSchwabenbr</option>
- </select><br>
- <inputtype="hidden"name="action"value="submitted">
- <inputtype="submit"name="submit"value="submitme!">
- </form>
- <?php
- }
- ?>
相关推荐
这样可以防止用户因为刷新页面而导致的重复提交。 表单令牌的实现原理是:在用户首次访问表单页面时,服务器生成一个唯一的令牌并存储在session或cookie中,同时将该令牌以隐藏字段的形式发送给浏览器。当表单提交...
这个方法的一个潜在问题是,如果用户直接访问提交页面(跳过了表单页面),可能会导致授权码缺失,从而无法正常提交。为了解决这个问题,可以在表单页面之外的其他地方初始化授权码,或者在提交页面上进行更严格的...
在Web开发中,表单重复提交是一个常见的问题,可能导致数据的冗余或者错误。这个问题可以通过多种方式解决,其中一种常用的方法就是结合JavaScript和PHP来防止。本文将详细讲解如何使用PHP来防止表单的重复提交。 ...
这种方法可以防止浏览器前进/后退按钮引发的重复提交问题,但不能防止用户手动输入URL再次访问表单页面。 3. **使用Session存储临时标识**: 在表单加载时,服务器端生成一个唯一的会话ID,并将其存储在隐藏的...
在PHP开发中,页面重复提交和刷新是一个常见的问题。用户可能会多次点击提交按钮或者刷新页面,这可能会导致数据库的重复数据插入、服务器资源的浪费,或者在某些业务场景中引起安全问题。为了解决这一问题,可以...
在PHP环境中,防止页面重复刷新是一项重要的功能,它有助于避免用户意外或恶意地多次提交表单数据,导致服务器资源的浪费或数据的错误处理。在本文中,我们将深入探讨如何利用PHP的session机制来实现这一目标。 ...
这种方法可以通过限制重复提交来防止无意义的频繁刷新和请求。 3. 防止网页频繁刷新的PHP代码实现: 提供的PHP代码实现了一个简单的防止页面在3秒内刷新超过5次的功能。原理是使用session记录页面最后一次访问的...
【PHP简单留言板单页php源码】是一种基于PHP语言实现的简单在线交流工具,它允许用户在...在学习过程中,还可以考虑增强功能,比如添加用户身份验证、防止重复提交、优化界面设计等,以使这个简单的留言板更加完善。
在登录场景中,它允许用户在提交表单后无需等待页面刷新,就能看到验证结果,提供更好的用户体验。 在"php实现的密码登录网站"项目中,核心流程如下: 1. **HTML表单**:登录页面通常包含一个HTML表单,包括用户名...
若该值等于1,说明数据已经成功保存,此时页面上显示的提交按钮将被禁用,避免用户重复提交。具体代码为`if($_GET[inserted]!=1){?新規登録" name="insertN" class="box1a"></input> }else{?新規登録" name="insertN...
在许愿墙项目中,PHP的主要职责是接收用户提交的愿望,验证数据,存储到数据库,并可能处理其他后台逻辑,如防止重复提交,检查权限等。 2. **AJAX原理** AJAX(Asynchronous JavaScript and XML)是一种创建动态...
在PHP开发中,防止恶意刷新和刷票是一个重要的安全措施,因为这可以帮助避免无效数据的产生,保护服务器资源,以及确保投票或数据提交的公正性。以下是一些防止恶意刷新和刷票的方法: 1. **使用验证码(CAPTCHA)*...
此版本的亮点在于自动同步数据功能,这意味着无论是网页端还是移动端,用户的数据都能保持实时同步,无需手动刷新或重复操作。这大大提升了用户体验,使得PHPWEB系统在移动互联网时代的适应性得到增强。 综上所述,...
- 性能优化:合理设计数据库索引,减少不必要的查询,以及缓存常访问数据,提高系统响应速度。 总结,DraconAjaxPoll是一个利用PHP、MySQL和Ajax技术构建的投票系统,实现了无刷新的投票体验。通过学习和使用这个...
这种方法可以防止简单的重复提交,但可能不适用于复杂的攻击场景。 3. **独立文件调用**: 在WordPress或其他网站中,为了方便管理和维护,可以将防刷新代码放入一个单独的PHP文件,如`forbiddenCC.php`,然后在每...
8. **响应式设计**:考虑到不同设备的访问,投票系统的前端可能采用了响应式设计,以适应不同屏幕大小的设备,如手机和平板电脑。 9. **文件组织**:一个完整的PHP项目通常包含多个文件和目录,如PHP脚本、样式表、...
PDO(PHP Data Objects)是PHP提供的一个数据库访问抽象层,它提供了一种标准的方法来连接和操作各种数据库,增强了安全性并提高了性能。 **数据库设计**是构建投票系统的基石。首先,我们需要创建一个或多个数据库...
4. **表单处理与验证**:用户投票通常通过HTML表单提交,PHP负责处理这些表单数据,包括验证投票的有效性(防止重复投票或恶意攻击)。 5. ** sessions 和 cookies**:为了跟踪用户投票状态,系统可能使用PHP的...
PHP通过AJAX(异步JavaScript和XML,现在多用JSON)与后端通信,获取或提交数据,而不刷新整个页面。 5. **投票逻辑**:在后端,PHP处理投票逻辑,比如检查用户是否已投过票,防止重复投票。它会根据用户的选择更新...