Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perbandingan kaedah pelaksanaan penyerahan anti-goncang dan anti-pendua PHP

Perbandingan kaedah pelaksanaan penyerahan anti-goncang dan anti-pendua PHP

WBOY
WBOYasal
2023-10-12 10:36:251226semak imbas

. Anti goncang bermakna apabila pengguna kerap mencetuskan peristiwa, kami hanya mahu melaksanakan tindakan yang dicetuskan terakhir, manakala penyerahan anti-berulang bermakna apabila pengguna menyerahkan borang beberapa kali dalam tempoh yang singkat, kami perlu memastikan bahawa hanya satu penyerahan diproses. Artikel ini akan menumpukan pada membandingkan dan memperkenalkan beberapa cara untuk mencapai anti-goncang dan anti-penyerahan semula dalam PHP, dan menyediakan contoh kod khusus.

PHP 防抖和防重复提交的实现方式对比

Cara melaksanakan anti goncang

Anti goncang boleh disediakan dengan menetapkan pemasa untuk menangguhkan operasi yang sepadan untuk tempoh masa tertentu selepas peristiwa pencetus terakhir. Berikut ialah contoh kod yang menggunakan PHP untuk mencapai anti-goncang:

function debounce($callback, $delay) {
    $timer = null;
    
    return function() use ($callback, $delay, &$timer) {
        if ($timer !== null) {
            clearTimeout($timer);
        }
        
        $timer = setTimeout($callback, $delay);
    };
}

// 使用防抖函数处理表单提交事件
$debouncedHandler = debounce(function() {
    // 处理表单提交逻辑
}, 1000);

// 绑定事件处理函数
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $debouncedHandler();
}

    Cara menghalang penyerahan berulang
  1. Menghalang penyerahan borang berulang boleh dicapai dengan cara berikut:
2.1.1 pengesahan, Kami boleh menjana pengecam unik untuk setiap permintaan borang dan menyimpan pengecam dalam sesi. Apabila pengguna menyerahkan borang, kami mula-mula menyemak sama ada pengecam wujud dan sama ada ia konsisten dengan pengecam dalam permintaan untuk menentukan sama ada ia adalah penyerahan berulang. Berikut ialah contoh kod yang menggunakan PHP untuk melaksanakan pengesahan Token:
    session_start();
    
    function generateToken() {
        return md5(uniqid(rand(), true));
    }
    
    function validateToken($token) {
        // 从 session 中获取 token
        $storedToken = $_SESSION['token'];
    
        return $storedToken && $token === $storedToken;
    }
    
    function removeToken() {
        // 从 session 中移除 token
        unset($_SESSION['token']);
    }
    
    // 生成 Token 并存储在 session 中
    $_SESSION['token'] = generateToken();
    
    // 处理表单提交逻辑
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $token = $_POST['token'];
    
        if (validateToken($token)) {
            // 执行表单提交操作
            // ...
    
            // 提交完成后移除 Token
            removeToken();
        } else {
            // Token 验证失败,可能是重复提交
            // 提示用户不要重复提交
        }
    }
  1. 2.2 Ubah hala
    Menggunakan ubah hala untuk mengendalikan lompatan halaman selepas penyerahan borang dengan berkesan boleh menghalang pengguna daripada menghantar borang berulang kali. Apabila pengguna menyerahkan borang, kami mengendalikan logik penyerahan terlebih dahulu dan kemudian menggunakan fungsi pengepala untuk mengubah hala pengguna ke halaman baharu. Berikut ialah contoh kod yang melaksanakan ubah hala menggunakan PHP:
  2. // 处理表单提交逻辑
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // 执行表单提交操作
        // ...
    
        // 重定向到新页面
        header("Location: success.php");
        exit;
    }
Halaman

dalam kod di atas tanpa menyerahkan borang lagi.

Ringkasan:

Dengan membandingkan kaedah pelaksanaan penyerahan anti-goncang dan anti-pendua PHP, kami boleh memilih cara yang sesuai untuk melindungi aplikasi kami berdasarkan keperluan khusus. Anti goncang sesuai untuk situasi di mana pengguna perlu mengelak daripada mencetuskan peristiwa dengan kerap, manakala menghalang penyerahan borang berulang adalah untuk menghalang pengguna daripada menyerahkan borang beberapa kali. Menggunakan pengesahan dan pengalihan Token ialah dua kaedah biasa dan boleh dilaksanakan Pembangun boleh memilih kaedah yang sesuai untuk mengelakkan penyerahan berulang berdasarkan situasi sebenar.

Atas ialah kandungan terperinci Perbandingan kaedah pelaksanaan penyerahan anti-goncang dan anti-pendua PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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