[英]php prevent form resubmission using sessions
所以我试图防止使用会话重新提交表单,这是我的代码:
<?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">
并且可以正常工作...但是,如果用户打开另一个选项卡,它将中断,那么我该如何解决呢?
我不确定这一点,但可能会分配一个新的全局会话变量,例如$_SESSION['checkSub']
。 因此,一旦提交表单,请将其设置为1
或true
,如果不是1
或false
,则仅让表单提交。
您可以在生成新的唯一ID之前检查是否在unid
中设置了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">
与其使用表单方法GET
,不如尝试使用POST
。 它将为您工作。 $_POST
数组仅在提交表单时才包含数据,因此您不必使用会话来了解是否提交了表单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.