我找到了一些答案,例如this good one(它使用两个文件,一个用于表单,另一个用于处理),还有一些其他答案使用外部资源(例如数据库或简单文件)。
我正在寻找的是阻止同一表单的多次提交,尤其是当表单和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']
,则代码会中断。
答案 0 :(得分:1)
如果您正在使用会话,则所有浏览器页面都会通用。因此,您需要为会话使用不同的名称
Eg: $_SESSION['your_page_name_token']