php使用会话阻止表单重新提交

时间:2016-10-18 01:24:00

标签: php session cookies form-submit html-form

所以我试图阻止使用会话重新提交表单 这是我的代码:

<?php
session_start();
if(isset($_GET['unid']))
{
    if ($_GET['unid']==$_SESSION["uid"])
    {
        echo "Form is Submited do something";
    }
    else
    {
        echo "no you can't do that";
    }
}
$unid = md5(uniqid());
$_SESSION["uid"] = $unid;
?>
<form method="GET">
    <input name="name" value="test">
    <input name="unid" value="<?php echo $unid;?>">
<input type="submit">

并且它有效......但是如果用户打开另一个标签然后它会中断,那么我该如何修复呢?

3 个答案:

答案 0 :(得分:0)

我不确定这一点,但可能会分配一个新的全局会话变量,比如$_SESSION['checkSub']。因此,一旦提交表单,请将其设置为1true,并且只有在表单提交时才会提交1false

答案 1 :(得分:0)

您可以在生成新的唯一ID之前检查会话中是否设置了unid。请参阅以下更新代码:

<?php
    session_start();
    if(isset($_GET['unid']))
    {
        if (isset($_SESSION['unid']) && $_GET['unid']==$_SESSION['unid'])
        {
            //form has been submitted with matching unid - process it as needed
            unset($_SESSION['unid']);
        }
        else
        {
            // Form was resubmitted or some other logic error
        }
    }
    $unid = ''; //declare here for good scope
    if (isset($_SESSION["unid"])) {
            $unid = $_SESSION["unid"];
    }
    else {
            $unid = md5(uniqid());
            $_SESSION["unid"] = $unid;
    }
    ?>
    <form method="GET">
        <input name="name" value="test">
        <input name="unid" value="<?php echo $unid;?>">
    <input type="submit">

答案 2 :(得分:0)

尝试使用GET,而不是使用表单方法POST。它会对你有用。提交表单时,$_POST数组中只有数据,因此您不必使用会话来了解表单是否已提交。