ThinkPHP6 pemprosesan penyerahan berulang: menghalang operasi berulang
Dalam pembangunan aplikasi web, penyerahan borang adalah operasi biasa. Walau bagaimanapun, kadangkala pengguna mungkin menghantar borang berulang kali disebabkan oleh kelewatan rangkaian atau salah operasi, yang boleh menyebabkan beberapa masalah kepada sistem. Untuk menyelesaikan masalah ini, kami boleh melakukan pemprosesan penyerahan borang berulang dalam rangka kerja ThinkPHP6 untuk menghalang pengguna daripada operasi berulang.
1. Analisis Sebab
Terdapat dua sebab utama penyerahan borang berulang:
1 Kelewatan rangkaian: Apabila pengguna mengklik butang hantar, data borang dihantar ke pelayan untuk diproses. Walau bagaimanapun, disebabkan kelewatan rangkaian, pelayan mungkin tidak bertindak balas dalam masa, dan pengguna tersalah anggap bahawa operasi gagal dan mengklik butang hantar sekali lagi.
2 Salah operasi: Selepas menyerahkan borang, pengguna boleh mengklik butang hantar beberapa kali kerana dia tidak pasti sama ada operasi itu berjaya, menyebabkan borang diserahkan beberapa kali.
2. Kaedah untuk mengelakkan penyerahan borang berulang
1 Pengesahan Token Borang: Pastikan keunikan borang dengan menambahkan Token pada borang. Setiap kali pengguna menyerahkan borang, Token menjana nilai unik dan disimpan dalam Sesi. Selepas pelayan menerima data borang, ia akan mengesahkan kesahihan Token Jika pengesahan gagal, ia bermakna borang diserahkan semula.
Contoh kod:
Tentukan kaedah dalam pengawal untuk menjana Token:
namespace appcontroller; use thinkController; class Example extends Controller { public function index() { // 生成Token $token = md5(uniqid(rand(), true)); // 保存Token到Session session('token', $token); // 渲染模板,将Token传递给前端 return $this->fetch('index', ['token' => $token]); } }
Tambah medan tersembunyi Token dalam templat:
<form action="/example/submit" method="post"> <input type="hidden" name="token" value="{{ $token }}"> <!-- 其他表单元素 --> <button type="submit">提交</button> </form>
Sahkan kesahihan Token dalam pengawal:
namespace appcontroller; use thinkController; class Example extends Controller { public function submit() { // 获取表单提交的Token值 $token = input('post.token'); // 判断Token是否有效 if ($token && $token === session('token')) { // 执行表单提交操作 // 清除Session中的Token session('token', null); // 返回成功页面 return '提交成功!'; } else { // 返回错误页面 return '非法的表单提交!'; } } }
, kita boleh melalui kod di atas melaksanakan pengesahan Token borang untuk memastikan keunikan borang. Apabila pengguna mengklik butang hantar, pelayan akan mengesahkan kesahihan token Jika pengesahan gagal, ini bermakna borang diserahkan semula.
2 Lumpuhkan butang hantar berulang: Selepas pengguna mengklik butang hantar, lumpuhkan butang dengan segera untuk mengelakkan pengguna mengklik berulang kali.
Contoh kod:
<script> document.getElementById('submitBtn').addEventListener('click', function () { // 禁用按钮 this.disabled = true; }); </script>
Dengan kod di atas, selepas pengguna mengklik butang hantar, butang akan dilumpuhkan serta-merta dan pengguna tidak boleh mengkliknya berulang kali, sekali gus mengelakkan penyerahan borang berulang.
3. Ringkasan
Penyerahan borang pendua adalah masalah biasa yang perlu ditangani dalam pembangunan aplikasi web. Kaedah yang diperkenalkan di atas adalah cara biasa untuk mengelakkan penyerahan borang berulang Anda boleh memilih kaedah yang sesuai mengikut situasi sebenar projek untuk mengendalikan penyerahan borang berulang untuk memastikan kestabilan dan keselamatan sistem.
Atas ialah kandungan terperinci Pemprosesan penyerahan berulang borang ThinkPHP6: menghalang operasi berulang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!