2011-01-29 103 views
3

我希望在页面加载后至少15秒提交一个窗体(因为填写窗体需要多长时间才能完成)。在PHP中的窗体计时器

我知道我可以做一些像$ time_page_loaded = time()的顶部;

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

这是正确的吗?另外,当你将这个函数重新分解成一个函数时,你会怎么做?

+0

你不能用PHP做到这一点。喔!除非当然,这是写在表单提交时加载的进程页面?无论如何,为什么不使用jQuery的呢?或者,为什么不忘记呢?如果数据正常,为什么要麻烦? – AJJ 2011-01-29 16:20:13

+0

这就是为什么我们需要对评论进行表决的原因之一。我喜欢最后的部分*为什么要麻烦* – RobertPitt 2011-01-29 16:31:53

回答

0

要检测服务器上的提交时间,你必须存储表单发送给用户的原始时间。在一个会话变量(好)或隐藏的表单字段(坏,除非你加密/严重混淆值),等等...当表单提交时,你采取当前时间,比较它存储的值,然后决定是否显示验证码。

但是,由于表单HAS已经被提交,并且它在低于截止时间的情况下完成,所以您必须重新构建整个表单(包括额外的验证码)并再次显示给用户 - 如果表单允许文件上传,你会迫使用户上传文件至少两次。

在javascript中实现这个客户端会更友好一点(只要你有服务器端处理)。加载页面时,将当前时间存储在JavaScript变量中。在表单上放置一个“onsubmit”处理程序。表单提交后,处理程序会触发,比较时间,并允许表单提交继续,或中止提交并将recaptcha部分插入表单。

-2

你应该把一个隐藏的输入字段与网页加载时间(由PHP生成)和表单提交时,比较对隐藏的输入值

提交时间,但这个是不安全的。你应该使用类似javascript的东西来做到这一点

+0

显然他使用Captcha来抵御机器人的安全性,而机器人能够修改表单中的任何值。你的回答无视第一个地方的验证码。 – RobertPitt 2011-01-29 16:26:52

+0

对,错过了;) – 2011-01-29 16:28:02

+0

不安全使用Javascript?它可以被禁用... – 2011-01-29 16:30:25

2

你将可以使用cookies作为这一点,因为这是一个安全措施,我会建议你使用会话。

会话是一种在服务器上的文件中存储少量内容的方法,该文件仅对Cookie散列有效。

在脚本的最开始,你需要把下面的命令:

<?php 
session_start(); 

页面加载后,你可以指定一个时间戳的会话,并在提交时,你可以计算与所花费的时间以上:

if (time() < $_SESSION["time_page_loaded"] + 15) 
{ 
    // Captcha 
} 
-1

随着方法你讨论,你需要把一个<input type="hidden" value="<?php echo time(); ?>" />(或使用会话变量)在你的页面和值进行比较的time()功能的输出电流,在t采取行动这里。你上面写的样板代码可以正常工作。

如果我可以,但我不确定这是一个非常好的用户体验,你正在提供。用户在事实(IE提交表单)之后才知道他做了某些“错误”。使用jQuery,你可以提供相当不错的体验:

http://www.erichynds.com/jquery/a-new-and-improved-jquery-idle-timeout-plugin/