在我的网页中,用户填写了一个将信息发送到MySql数据库的表单.发送的数据输入之一是日期/时间,格式(我可以根据需要更改格式)date('l jS \of F Y h:i:s A');
因此,当用户提交表单时,我想检查实际时间/日期是否比发送的时间/日期多30秒,以便允许或不允许提交表单.谢谢!
所以你有......
<form action="wtv.php" method="POST">
<input type="hidden" name="date" value="<?php echo date('l jS \of F Y h:i:s A'); ?>" />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
...当用户点击"提交"时,您想检查"日期"输入的值是否小于30秒之前?
你可以用Ken Keenan建议的东西做到这一点......但问题是你不能相信客户的输入.在您对jeroen的回答的评论中,您表明了一种意识到客户端脚本是不值得信任的,但这不仅限于脚本; 如果你真的需要这个是安全的,这样在请求之后30秒内没有人可以提交这个表格<form>,你必须做其他事情.
问题是服务器对"日期"输入的期望是可预测的; 如果我访问你<form>并打开Firebug甚至保存HTML文档并在记事本中打开它,我可以很容易地猜测如何更新,<input />以便我可以提交.
而是使用令牌.
随机生成一种唯一的随机ID并将其存储在会话或数据库中......
$unique = md5(uniqid()).md5(time()); // there are better ways to get a unique random ID
$_SESSION['tokens'][$unique] = time();
Run Code Online (Sandbox Code Playgroud)
然后包括令牌的(不是日期/时间!)<form>...
<form action="wtv.php" method="POST">
<input type="hidden" name="token" value="<?php echo htmlentities($unique); ?>" />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
...并在提交时检查该令牌的时间是否少于30秒.
<?php
// partially borrowed from Ken Keenan's answer...
if((time() - $_SESSION['tokens'][$_POST['token']]) > 30) {
echo "Time's up!";
}
?>
Run Code Online (Sandbox Code Playgroud)