搜尋
首頁php教程php手册PHP利用session与cookies防重复提交实例

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

防止刷新或再交提交

所以就考虑增加一个参数来防止这类情况的发生,COOKIE和SESSION可供选择,不过 COOKIE是客户端的,如果人家禁用COOKIE的话,照样可以恶意刷新点击数。还是用SESSION的好,IP+URL参数的MD5值做 SESSION名 

实现原理 设置 max_reloadtime =100; //设置页面刷新最长间隔时间

用户第一次打开页面 记录当前的时间保存在 session_start

用户第二次打开页面(判断 session_start是否存在) 用当前时间和 session_start 相减 得到差值 time_passed

当 time_passed

<?php
session_start();
$k = $_GET[&#39;k&#39;];
$t = $_GET[&#39;t&#39;];
//防刷新时间
$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
/* 改进版
    PHP防止用户刷新页面(Refresh or Reload),重复提交表单内容。 
    由于表单变量的内容由$_POST[&#39;name&#39;]引用,也许在处理完表单后,直接将$_POST[&#39;name&#39;]销毁(unset())即可。其实不然。可能由于页面默认对表单内容进行了缓存,所以,即使销毁了$_POST[&#39;name&#39;],刷新后,$_POST[&#39;name&#39;]还是会被赋值,一样有效。   
    可利用Session解决。首先给Session赋个值,比如400,第一次提交成功后改变Session的值,当第二次提交时去检查这个Session 的值,如果不是400,就不再处理表单中的数据。 
    可设置Session的有效时间?    
*/
if (isset($_POST[&#39;action&#39;]) && $_POST[&#39;action&#39;] == &#39;submitted&#39;) {
    session_start();
    isset($_SESSION[&#39;num&#39;]) or die("no session");
    if ($_SESSION[&#39;num&#39;] == 400) {
        print &#39;<pre class="brush:php;toolbar:false">&#39;;
        print_r($_POST);
        print &#39;<a href="&#39; . $_SERVER[&#39;PHP_SELF&#39;] . &#39;">Please try again</a>&#39;;
        print &#39;
';         $_SESSION['num'] = 500;     } else {         print '
';
        print_r($_POST);
        echo "However you have submitted";
        print '
';     } } else {     session_start() or die("session is not started");     $_SESSION['num'] = 400; ?>          
" method="POST">           Name: 
           Email: 
           Beer: 
           
                                 
           

例,一个基于smarty演示版

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

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

在tpl模板中

1.

<?php
/*利用PHP的Session功能,也能避免PHP表单重复提交。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交
*/
session_start(); //根据当前SESSION生成随机数
$code = mt_rand(0, 1000000);
$_SESSION[&#39;code&#39;] = $code;
//在表单中隐藏传递:
 < inputtype = "hidden"name = "originator"value = "< ?=$code?>" >
//在接收页代码如下:
session_start();
if (isset($_POST[&#39;originator&#39;])) {
    if ($_POST[&#39;originator&#39;] == $_SESSION[&#39;code&#39;]) {
        // 处理该表单的语句,省略
        
    } else {
        echo &#39;请不要刷新本页面或 
重复提交表单!&#39;;
    }
}
?>


永久链接:

转载随意!带上文章地址吧。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器