所以我试图阻止使用会话重新提交表单 这是我的代码:
<?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">
并且它有效......但是如果用户打开另一个标签然后它会中断,那么我该如何修复呢?
答案 0 :(得分:0)
我不确定这一点,但可能会分配一个新的全局会话变量,比如$_SESSION['checkSub']
。因此,一旦提交表单,请将其设置为1
或true
,并且只有在表单提交时才会提交1
或false
。
答案 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
数组中只有数据,因此您不必使用会话来了解表单是否已提交。