说我在page.cfm上有以下脚本。每当有人来到page.cfm时,都会向我发送一封电子邮件。因此,如果1000人来到page.cfm,我会收到1000封电子邮件。
<cfmail to="joe@smith.com"
from="error@smith.com"
subject="Error"
type="text">
A person visited.
</cfmail>
我想限制它,所以我只会在前一天有5个人访问时收到电子邮件。
因此,如果2人今天访问,我会收到2封电子邮件。如果5人访问我得到5,但如果有100人访问,我仍然只收到5封电子邮件。然后第二天循环继续(如果2人只访问2封电子邮件,但如果有100人只访问5封电子邮件)
如何才能使用ColdFusion执行此操作? (没有cfschedule)
答案 0 :(得分:7)
我能想到的最简单的方法是在一对Application变量中加上一个计数器和一个日期戳。
然后,对于每个请求,请检查您录制的日期。如果不是今天,请将计数器变量重置为1并将日期重新设置为今天。
然后,在您放置cfmail标记的位置,请检查计数器是否已达到限制。如果没有,请发送邮件。无论哪种方式,增加计数器。
在Application.cfc onApplicationStart()中:
<cfset application.alertDate = now()>
<cfset application.alertCount = 1>
(以上主要是为了确保以后使用时存在变量)
在Application.cfc onRequestStart()中:
<cfif dateCompare(application.alertDate,now(),"d") EQ -1)>
<cfset application.alertCount = 1>
<cfset application.alertDate = now()>
</cfif>
在page.cfm中:
<cfset application.alertCount++>
<cfif application.alertCount LTE 5>
<cfmail ... >
</cfif>
答案 1 :(得分:2)
将访问/电子邮件计数存储在应用程序范围内,并每天通过
重置应用程序范围也将最后一个访客日期存储在应用程序范围中,并且 添加一些逻辑来重置计数,或
使用cfscheduler将计数重置为每天0
答案 2 :(得分:0)
派对晚了,我还不能评论以前的答案,所以我会这样做。给出的两个答案都有效,但您确实需要知道应用程序范围变量将在您的应用程序结束时消失并重新初始化。如果它对您很重要,您将希望将值保留在某处,例如使用getProfileString / setProfileString访问的INI文件或数据库中的表。