php中的表单计时器

时间:2011-01-29 16:17:07

标签: php datetime

我希望在页面加载后至少15秒提交一个表单(因为这需要填写表单的平均时间。)

我知道我可以在顶部执行类似$ time_page_loaded = time()的操作;

if (time() < $time_page_loaded + 15)
{
  // show reCaptcha
}
else
{
  // submit to database
}

这是对的吗?另外,当你将它重新纳入一个函数时,你会如何制作它?

4 个答案:

答案 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的东西来做到这一点