Rumah php教程 php手册 PHP利用session与cookies防重复提交实例

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

May 25, 2016 pm 04:54 PM
select

在网页开发中防止重复提交是一个比较实用并且也常用碰到的问题了,除了我们可以直接在数据库查询用户是否提交相同数据进行过滤外,我们还可以在用户提交数据时就防止这类事情发现,下面我来介绍基于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;
}
?>
Salin selepas log masuk

防表单重复提交

<?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;
Salin selepas log masuk
'; $_SESSION['num'] = 500; } else { print '
&#39;;
        print_r($_POST);
        echo "However you have submitted";
        print &#39;
Salin selepas log masuk
'; } } else { session_start() or die("session is not started"); $_SESSION['num'] = 400; ?>
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);
?>
Salin selepas log masuk

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;;
    }
}
?>
Salin selepas log masuk


永久链接:

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Kaedah pemprosesan tak segerak bagi pengaturcaraan serentak Select Channels Go menggunakan golang Kaedah pemprosesan tak segerak bagi pengaturcaraan serentak Select Channels Go menggunakan golang Sep 28, 2023 pm 05:27 PM

Kaedah pemprosesan tak segerak bagi pengaturcaraan serentak SelectChannelsGo menggunakan golang Pengenalan: Pengaturcaraan serentak ialah bidang penting dalam pembangunan perisian moden, yang boleh meningkatkan prestasi dan responsif aplikasi dengan berkesan. Dalam bahasa Go, pengaturcaraan serentak boleh dilaksanakan dengan mudah dan cekap menggunakan penyataan Saluran dan Pilih. Artikel ini akan memperkenalkan cara menggunakan golang untuk kaedah pemprosesan tak segerak bagi pengaturcaraan serentak SelectChannelsGo dan menyediakan khusus

Bagaimana untuk menyembunyikan elemen pilih dalam jquery Bagaimana untuk menyembunyikan elemen pilih dalam jquery Aug 15, 2023 pm 01:56 PM

Bagaimana untuk menyembunyikan elemen pilih dalam jquery: 1. kaedah hide(), memperkenalkan perpustakaan jQuery ke dalam halaman HTML, anda boleh menggunakan pemilih yang berbeza untuk menyembunyikan elemen pilih, pemilih ID menggantikan selectId dengan ID elemen pilih yang anda sebenarnya gunakan; 2. kaedah css(), gunakan pemilih ID untuk memilih elemen pilih yang perlu disembunyikan, gunakan kaedah css() untuk menetapkan atribut paparan kepada tiada, dan gantikan selectId dengan ID elemen pilih.

Bagaimana untuk melaksanakan pengikatan peristiwa perubahan bagi elemen terpilih dalam jQuery Bagaimana untuk melaksanakan pengikatan peristiwa perubahan bagi elemen terpilih dalam jQuery Feb 23, 2024 pm 01:12 PM

jQuery ialah perpustakaan JavaScript popular yang boleh digunakan untuk memudahkan manipulasi DOM, pengendalian acara, kesan animasi, dll. Dalam pembangunan web, kami sering menghadapi situasi di mana kami perlu menukar pengikatan acara pada elemen terpilih. Artikel ini akan memperkenalkan cara menggunakan jQuery untuk mengikat acara perubahan elemen terpilih, dan memberikan contoh kod khusus. Pertama, kita perlu mencipta menu lungsur dengan pilihan menggunakan label:

Apakah sebab mengapa Linux menggunakan pilih? Apakah sebab mengapa Linux menggunakan pilih? May 19, 2023 pm 03:07 PM

Oleh kerana pilih membenarkan pembangun menunggu beberapa penimbal fail pada masa yang sama, ia boleh mengurangkan masa menunggu IO dan meningkatkan kecekapan IO proses. Fungsi select() ialah fungsi pemultipleksan IO yang membolehkan program memantau berbilang deskriptor fail dan menunggu satu atau lebih deskriptor fail yang dipantau menjadi "sedia" yang dipanggil keadaan "bersedia" ialah Merujuk kepada: fail deskriptor tidak lagi disekat dan boleh digunakan untuk jenis operasi IO tertentu, termasuk boleh dibaca, boleh ditulis dan pengecualian. pilih ialah fungsi komputer yang terletak dalam fail pengepala #include. Fungsi ini digunakan untuk memantau perubahan deskriptor fail—membaca, menulis atau pengecualian. 1. Pengenalan kepada fungsi pilih Fungsi pilih ialah fungsi pemultipleksan IO.

Bagaimana untuk menggunakan sintaks pilihan mysql Bagaimana untuk menggunakan sintaks pilihan mysql Jun 01, 2023 pm 07:37 PM

1. Kata kunci dalam pernyataan SQL tidak peka huruf besar-kecil SELECT bersamaan dengan SELECT dan FROM bersamaan dengan from. 2. Untuk memilih semua lajur daripada jadual pengguna, anda boleh menggunakan simbol * untuk menggantikan nama lajur. Sintaks--ini ialah ulasan--pertanyaan keluar [semua] data daripada [jadual] yang ditentukan oleh FEOM * bermaksud [semua lajur] SELECT*FROM--pertanyaan keluar data yang ditentukan daripada [jadual] yang ditentukan daripada Data daripada. nama lajur (medan) PILIH nama lajur DARI contoh nama jadual--Nota: Gunakan koma Inggeris untuk memisahkan berbilang lajur pilih nama pengguna, kata laluan daripada

Laksanakan Select Channels Go pengoptimuman prestasi pengaturcaraan serentak melalui golang Laksanakan Select Channels Go pengoptimuman prestasi pengaturcaraan serentak melalui golang Sep 27, 2023 pm 01:09 PM

Melaksanakan SelectChannels melalui golang Pengoptimuman prestasi pengaturcaraan serentak Go Dalam bahasa Go, adalah perkara biasa untuk menggunakan goroutine dan saluran untuk melaksanakan pengaturcaraan serentak. Apabila berurusan dengan berbilang saluran, kami biasanya menggunakan penyata pilihan untuk pemultipleksan. Walau bagaimanapun, dalam kes konkurensi berskala besar, menggunakan pernyataan terpilih boleh menyebabkan kemerosotan prestasi. Dalam artikel ini, kami akan memperkenalkan beberapa pelaksanaan pilih melalui golang

Pilih Channels Go pengaturcaraan serentak untuk kebolehpercayaan dan keteguhan menggunakan golang Pilih Channels Go pengaturcaraan serentak untuk kebolehpercayaan dan keteguhan menggunakan golang Sep 28, 2023 pm 05:37 PM

SelectChannels for Reliability and Robustness using Golang Pengenalan kepada Concurrent Programming: Dalam pembangunan perisian moden, concurrency telah menjadi topik yang sangat penting. Menggunakan pengaturcaraan serentak boleh menjadikan atur cara lebih responsif, menggunakan sumber pengkomputeran dengan lebih cekap dan lebih berupaya mengendalikan tugas pengkomputeran selari berskala besar. Golang ialah bahasa pengaturcaraan serentak yang sangat berkuasa Ia menyediakan cara yang mudah dan berkesan untuk melaksanakan pengaturcaraan serentak melalui coroutine dan mekanisme saluran.

Cara menggunakan golang untuk pengaturcaraan serentak Select Channels Go Cara menggunakan golang untuk pengaturcaraan serentak Select Channels Go Sep 27, 2023 pm 09:07 PM

Cara menggunakan golang untuk SelectChannelsGo pengaturcaraan serentak Bahasa Go ialah bahasa yang sangat sesuai untuk pengaturcaraan serentak, di mana saluran (Saluran) dan pernyataan Pilih adalah dua elemen penting untuk mencapai keselarasan. Artikel ini akan memperkenalkan cara menggunakan SelectChannels golang untuk pengaturcaraan serentak dan memberikan contoh kod khusus. 1. Konsep saluran Saluran digunakan untuk komunikasi dan data antara goroutine

See all articles