避免刷新页面时重复提交表单数据

一般通过session、cookie,有些情况可以通过设置数据表的主键/唯一键来达到目的。
1、session 方式:
<?php
    session_start();
    $_SESSION['sess_token'] = sha1(mt_rand());
?>

<html>
    <body>
        <form action="submit.php" method="post">
            <input type="hidden" name="sess_token" value="<?php echo $_SESSION['sess_token']; ?>" />
            <input type="text" name="user" value="username" /><br />
            <input type="submit" name="sub" value='submit' />
        </form>
    </body>
</html>
<?php
    // session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。
    session_start();
    if( ! empty($_POST['sub']) ) {
        if ( ! empty($_SESSION['sess_token']) && ($_SESSION['sess_token']==$_POST['sess_token']) ) {
            echo '<br />', 'found!';

            // do something ...

            $_SESSION['sess_token'] = null;
            session_destroy();
        } else {
            echo '<br />', 'Second-Time Submit!';
        }
    }
?>
2、cookie方式:
<?php
    $store_token = $token = sha1(mt_rand());
    setcookie('token', $token, time()+3600, '/');
?>

<html>
    <body>
        <form action="submit.php" method="post">
            <input type="hidden" name="token" value='<?php echo $token;?>' />
            <input type="text" name="user" value="username" /><br />
            <input type="submit" name="sub" value='submit' />
        </form>
    </body>
</html>
<?php
    if(!empty($_POST['sub'])) {
        if (!empty($_COOKIE['token']) && $_COOKIE['token']==$_POST['token']) {
            echo '<br />', 'found!';

            // do something ...

            setcookie('token', null, -1);
        } else {
            echo '<br />', 'Second-Time Submit!';
        }
    }
?>
展开阅读全文

没有更多推荐了,返回首页