我希望在页面加载后至少15秒提交一个表单(因为这需要填写表单的平均时间。)
我知道我可以在顶部执行类似$ time_page_loaded = time()的操作;
if (time() < $time_page_loaded + 15)
{
// show reCaptcha
}
else
{
// submit to database
}
这是对的吗?另外,当你将它重新纳入一个函数时,你会如何制作它?
答案 0 :(得分:2)
你可以在这个位上使用cookies,因为这是一个安全措施,我会建议你使用会话。
会话是一种在服务器上的文件中存储少量内容的方法,该文件仅对cookie哈希有效。
在脚本的最开始,您需要输入以下命令:
<?php
session_start();
当页面加载时,您可以为会话分配时间戳,提交后您可以计算上述时间:
if (time() < $_SESSION["time_page_loaded"] + 15)
{
// Captcha
}
答案 1 :(得分:0)
要检测服务器上的提交时间,您必须将表单发送给用户的原始时间存储在某处。在一个会话变量(好),或一个隐藏的表单字段(坏,除非你加密/大量模糊该值)等...当表单提交时,你采取当前时间,将其与存储的值进行比较,然后决定是否展示验证码。
但是,由于表单已提交,并且在不到截止时间内完成,您必须重建整个表单(包括额外的验证码)并再次向用户显示 - 如果表单允许文件上传,你强迫用户上传文件至少两次。
在javascript中实现此客户端将更加用户友好(只要您有服务器端处理)。加载页面时,将当前时间存储在javascript变量中。在表单上放置一个“onsubmit”处理程序。提交表单时,处理程序将触发,比较时间,并允许表单提交继续,或者中止提交并将重新访问部分插入表单中。
答案 2 :(得分:-1)
使用您正在讨论的方法,您需要在页面中放置<input type="hidden" value="<?php echo time(); ?>" />
(或使用会话变量),并将该值与time()
函数的当前输出进行比较,并从那里。你上面写的样板代码可以正常工作。
如果可以的话,我不确定这是一个非常好的用户体验。直到事实(IE提交表格)之后,用户才知道他做错了什么。使用jQuery可以提供相当不错的体验:
http://www.erichynds.com/jquery/a-new-and-improved-jquery-idle-timeout-plugin/
答案 3 :(得分:-2)
您应该在页面加载时间(由PHP生成)中放置一个隐藏的输入字段,并在提交表单时,将提交时间与隐藏的输入值进行比较
但这根本不安全。你应该使用类似javascript的东西来做到这一点