1

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人が1日に訪問したときにのみメールが届きます。

ですから、今日2人が訪れると、2通のメールが届きます。5人が訪問した場合は5通になりますが、100人が訪問した場合でも5通の電子メールしか届きません。そして、そのサイクルは翌日も続きます(2人が訪問した場合は2通の電子メールのみが送信されますが、100人が訪問した場合は5通の電子メールのみが送信されます)

これをColdFusionのみで行うにはどうすればよいですか?(cfscheduleなし)

4

3 に答える 3

7

私が考えることができる最も簡単な方法は、アプリケーション変数のペアにカウンターと日付スタンプを配置することです。

次に、リクエストごとに、記録した日付を確認します。今日でない場合は、カウンター変数を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>
于 2012-04-12T18:43:17.647 に答える
2

訪問/電子メールの数をアプリケーションスコープに保存し、次のいずれかの方法でアプリケーションスコープを毎日リセットします

  1. 最後の訪問者の日付もアプリケーションスコープに保存し、カウントをリセットするロジックを追加するか、

  2. cfschedulerを使用して、カウントを毎日0にリセットします

于 2012-04-12T18:41:36.400 に答える
0

パーティーに遅れて、まだ前の答えにコメントできないので、こうします。与えられた答えは両方とも機能しますが、アプリケーションが終了すると、これらのアプリケーションスコープ変数が消えて再初期化されることを知っておく必要があります。重要な場合は、値をどこかに永続化する必要があります。たとえば、getProfileString / setProfileStringでアクセスするINIファイルや、データベース内のテーブルなどです。

于 2012-04-19T01:39:42.407 に答える