Home  >  Article  >  Backend Development  >  Anti-shake and anti-duplicate submission: essential skills in PHP development

Anti-shake and anti-duplicate submission: essential skills in PHP development

王林
王林Original
2023-10-12 09:24:24522browse

防抖和防重复提交:PHP 开发中的必备技巧

Anti-shake and anti-duplicate submission: essential skills in PHP development

With the development of the Internet, Web applications have become indispensable in people's lives part. In PHP development, anti-shaking and anti-repetitive submission are one of the very important skills. This article will introduce the concepts and principles of anti-shake and anti-duplicate submission, and provide specific code examples.

1. The concept and principle of anti-shake
Anti-shake is a common technical means used to reduce the number of executions of frequently triggered events. Simply put, the function of anti-shake is to only execute the last triggered event within a certain period of time, while ignoring previous trigger events.

The principle of anti-shake is to use a timer to delay the function of executing the event. When the event is triggered, a timer will be set. Within the time range of the timer, if the event is triggered again, the time will be re-timed; if the event is not triggered again after the timer expires, the last triggered event will be executed. .

The following is a simple PHP code example that implements the anti-shake function:

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

Usage example:

function search($keyword) {
    // 模拟搜索操作
    echo "搜索关键词:$keyword
";
}

$debounceSearch = debounce('search', 1000); // 设置延迟为 1 秒

$debounceSearch('PHP'); // 触发搜索关键词:PHP
$debounceSearch('JavaScript'); // 不触发
$debounceSearch('Python'); // 不触发

In the above example, a debounce function is generated by calling the debounceSearch function, the delay time is set to 1 second. Each time the debounceSearch function is called, if there is a new call within 1 second, the time will be reset; if there is no new call within 1 second, the last call will be executed.

2. The Concept and Principle of Anti-Duplicate Submission
Anti-duplicate submission refers to preventing users from submitting the same request multiple times during operations such as form submission. Repeated submissions may cause abnormalities in back-end data and even cause unnecessary pressure on the system.

The principle of preventing repeated submission is to generate a unique identifier for each request before submitting it. After receiving the request, the backend will check whether the identifier has been used. If it has been used, it will be considered a duplicate submission and refuse to process; if it has not been used, it will continue to process the request and mark the identifier as used.

The following is a simple PHP code example that implements the function of preventing duplicate submission:

function preventDuplicateSubmit() {
    $token = md5(uniqid(rand(), true));
    $_SESSION['token'] = $token;
    return $token;
}

function checkDuplicateSubmit() {
    $token = isset($_SESSION['token']) ? $_SESSION['token'] : '';
    unset($_SESSION['token']);
    return !empty($token) && $token === $_POST['token'];
}

// 处理表单提交请求
function handleFormSubmit() {
    if (checkDuplicateSubmit()) {
        echo "请勿重复提交表单";
        return;
    }
    // 处理正常请求
    echo "表单提交成功";
}

// 生成表单
function generateForm() {
    $token = preventDuplicateSubmit();
    echo <<<HTML
    <form method="post" action="submit.php">
        <input type="hidden" name="token" value="$token">
        <!-- 表单其他字段 -->
        <button type="submit">提交</button>
    </form>
    HTML;
}

// 页面中显示表单并处理提交
generateForm();
handleFormSubmit();

In the above example, a unique identifier is generated through the preventDuplicateSubmit function and saved in session. When the form is submitted, the identifier will be added to the request as a hidden field (token), and it will be checked whether the requested token is consistent with the one saved in the session.

Through the above anti-shaking and anti-resubmission techniques, the user experience and security of web applications can be improved. In actual development, according to specific needs and business scenarios, appropriate adjustments and expansions can be made for different scenarios to meet actual needs.

Although specific code examples are provided above, it is recommended to read the documentation carefully and test before use to ensure the stability and security of the code.

The above is the detailed content of Anti-shake and anti-duplicate submission: essential skills in PHP development. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn