2011-07-22 29 views
5

スケジューラから実行されているか、ブラウザから実行されているかをColdFusionアプリケーションが知る方法はありますか?理想的には、アプリケーション全体で使用されるApplication.cfmの "isScheduled"などのセッションフラグを設定したいと思います。Coldfusion:スケジューラによって実行されているかどうかの検出

EDIT 私はユーザーエージェントをチェックすることになった、それは(セキュリティを向上させるために)ローカルで実行され、そのページがフォルダ内にあること(それ以降のApplication.cfmで実行されている)がいます....

Request.isScheduled = FindNoCase("CFSCHEDULE",CGI.HTTP_USER_AGENT) and (Find("10.",CGI.REMOTE_ADDR)==1 or Find("198.162.",CGI.REMOTE_ADDR)==1) and FindNoCase("scheduled",CGI.CF_TEMPLATE_PATH);

+1

なぜ単にクエリ文字列パラメータを渡して決定を下すことができないのですかその上に? – Candide

+1

フラグの用途の1つは、使用をバイパスすることです(エンタープライズ・レベルの中央認証サービス・ページへのリダイレクトを使用する)認証をスケジューラーが実行しているときに実行しますが、それ以外の場合はすべて認証が必要です。私が含めるクエリパラメータを知っているのは唯一の人ではありますが、ハッキングの可能性が開かれます。 –

+2

ユーザエージェントを確認することはもはや安全ではありません。 FireFoxで私のユーザエージェントを簡単に変更することができます。アドオンのUser Agent Switcherも簡単に変更できます。私はテストのためにこれを常に行います。 – Yisroel

答えて

4

ユーザエージェントを確認します。ユーザーエージェントは "CFSCHEDULE"ですが、最初にこれを確認してください。

+0

ありがとうございます。それは動作します。私が終わったのは次のようなものでした:Request.isScheduled = FindNoCase( "CFSCHEDULE"、CGI.HTTP_USER_AGENT); –

0

私はわかりませんが、アプリケーションのスケジューラによって実行した場合、その後cgi.remote_addressはあなたが追跡することができ、すべての要求に対して同じでなければなりません.....と「isSchedule」をマーク:スケジューリングが可能に

+0

ただし、コードを別のサーバーに移植する場合は、そのサーバーをハンドコードする必要があります。私はhttp_user_agentをチェックして、remote_addressをチェックしてローカルかどうかを調べました(元の質問に編集するコードを参照)。ありがとう。 –

0

タスクスケジューラに実際のタスクをトリガするタスクのリストを実行させるのが一般的です。私。実行するタスクをcfincludeするdailytask.cfmを実行しました。これで、url.parametersなどを追加してトリガーのソースを特定できるようになりました。

1

私のApplication.cfmロジックをcfifあれば、パラメータ( 'cron')が定義されているかどうかをチェックし、そうであれば、認証、ヘッダクラップなどの残りのロジックをすべてスキップします。

次に、私がcronパラメータ(http://mysite.com/scheduledtasks.cfm?cron=yo)でヒットしたいURLに渡します。