PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > 工作总结

php 防止表单重复提交两种实现方法

管理员 2025-03-06
工作总结
64

在 PHP 中,防止表单重复提交是一个常见的需求。重复提交可能会导致数据重复插入、重复支付等问题。以下是两种常见的实现方法:


方法 1:使用 Token(令牌)机制

实现原理:

  1. 在表单中生成一个唯一的 Token,并将其存储在 Session 中。

  2. 用户提交表单时,检查 Token 是否匹配。

  3. 处理完表单后,清除 Session 中的 Token,防止重复提交。

实现步骤:

  1. 生成 Token 并嵌入表单

    php
    复制
    <?phpsession_start();// 生成一个唯一的 Token$token = bin2hex(random_bytes(32));$_SESSION['form_token'] = $token;?><form method="POST" action="submit.php">
        <input type="hidden" name="token" value="<?php echo $token; ?>">
        <input type="text" name="username" placeholder="用户名" required>
        <button type="submit">提交</button></form>
  2. 在表单处理页面验证 Token

    php
    复制
    <?phpsession_start();if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // 检查 Token 是否存在且匹配
        if (isset($_POST['token']) && isset($_SESSION['form_token']) && $_POST['token'] === $_SESSION['form_token']) {
            // 处理表单数据
            $username = $_POST['username'];
            echo "用户名: " . htmlspecialchars($username);
    
            // 清除 Token,防止重复提交
            unset($_SESSION['form_token']);
        } else {
            echo "表单已提交,请勿重复提交!";
        }}?>

方法 2:使用重定向(Post/Redirect/Get 模式)

实现原理:

  1. 用户提交表单后,处理表单数据并重定向到另一个页面。

  2. 重定向后,用户的浏览器会发送 GET 请求,而不是再次提交表单。

实现步骤:

  1. 表单页面

    php
    复制
    <form method="POST" action="process.php">
        <input type="text" name="username" placeholder="用户名" required>
        <button type="submit">提交</button></form>
  2. 处理表单数据并重定向

    php
    复制
    <?php// process.phpif ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // 处理表单数据
        $username = $_POST['username'];
        // 保存数据到数据库或其他操作
    
        // 重定向到结果页面
        header('Location: result.php');
        exit();}?>
  3. 显示结果的页面

    php
    复制
    <?php// result.phpecho "表单提交成功!";?>

两种方法的对比

方法优点缺点
Token 机制灵活,适用于多种场景需要维护 Session,增加服务器负担
重定向模式简单易实现,无需额外存储需要额外的重定向,可能影响用户体验

结合使用

在实际开发中,可以将两种方法结合使用,以提供更强大的防护:

  1. 使用 Token 防止表单重复提交。

  2. 使用重定向模式避免用户刷新页面时重复提交。

示例:

php
复制
<?phpsession_start();if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 检查 Token
    if (isset($_POST['token']) && isset($_SESSION['form_token']) && $_POST['token'] === $_SESSION['form_token']) {
        // 处理表单数据
        $username = $_POST['username'];
        echo "用户名: " . htmlspecialchars($username);

        // 清除 Token
        unset($_SESSION['form_token']);

        // 重定向到结果页面
        header('Location: result.php');
        exit();
    } else {
        echo "表单已提交,请勿重复提交!";
    }} else {
    // 生成 Token
    $token = bin2hex(random_bytes(32));
    $_SESSION['form_token'] = $token;}?><form method="POST" action="">
    <input type="hidden" name="token" value="<?php echo $token; ?>">
    <input type="text" name="username" placeholder="用户名" required>
    <button type="submit">提交</button></form>

总结

  • Token 机制:适合需要严格防止重复提交的场景。

  • 重定向模式:适合简单的表单提交场景。

  • 结合使用:提供更全面的防护。

根据实际需求选择合适的方法,可以有效防止表单重复提交问题。




希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部