繁体   English   中英

防止多次提交同一表格

[英]Prevent Multiple Submissions of the Same Form

我发现了一些类似的答案(它使用两个文件,一个用于表单,另一个用于处理),还有其他一些使用外部资源的答案(例如数据库或简单文件)。

我正在寻找的是防止同一表单的多次提交,尤其是当表单和php代码在同一文件中且不使用外部文件时。

这是我尝试过的:

<?php //fone.php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

if(isset($_SESSION['token']))
    $_SESSION['prv_token']=$_SESSION['token'];

$_SESSION['token']=md5(uniqid());
?>

<html>
    <head><meta charset="utf-8"><title>TEST</title></head>
    <body>
        <?php
            if($_SERVER['REQUEST_METHOD']=='POST' && $_POST['token']==$_SESSION['prv_token']){
                echo "<p>Form Submited</p>";
            }
        ?>
        <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">
            <input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>">
            Name : <input type="text" name="name"><br>
            Age  : <input type="text" name="age"><br>
            <input type="submit" name="submit">
        </form>
    </body>
</htmL>

该解决方案对我有用,但是如果我在其他文件中使用$_SESSION['token'] ,则代码会中断。

如果您正在使用会话,那么它将对所有浏览器页面都是通用的。 因此,您需要为会话使用不同的名称

Eg: $_SESSION['your_page_name_token']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM