2011-07-22 13 views
5

Esiste un modo per un'app di ColdFusion per sapere se viene eseguita dallo scheduler o da un browser? Idealmente, mi piacerebbe impostare un flag Session, ad esempio "isSchedched" in Application.cfm da utilizzare in tutta l'app.Coldfusion: rilevare se viene eseguito dall'Utilità di pianificazione

EDIT Ho finito per controllare l'agente utente, e che sta per essere eseguito localmente (per migliorare la sicurezza), e (dal momento che è in esecuzione in Application.cfm) che la pagina si trova nella cartella che permette la programmazione:

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

Perché non puoi semplicemente passare un parametro stringa di query e prendere la decisione su quello? – Candide

+1

Uno degli usi per la bandiera sarebbe quello di bypassare l'uso r autenticazione (che utilizza un reindirizzamento a una pagina del servizio di autenticazione centrale a livello aziendale) quando viene eseguita dallo scheduler, ma richiede l'autenticazione tutte le altre volte. Anche se sarei l'unico a conoscere il parametro della query da includere, si aprirà una possibile via per l'hacking, che preferirei evitare. –

+2

Controllare l'User Agent non è più sicuro. Posso facilmente cambiare il mio user agent in FireFox - c'è anche un add-on User Agent Switcher per renderlo facile da cambiare. Lo faccio sempre per i test. – Yisroel

risposta

4

Controllare il programma utente. L'agente utente è "CFSCHEDULE", ma si prega di confermare prima.

+0

Grazie. Che funzioni. Quello che ho avuto è stato: Request.isScheduled = FindNoCase ("CFSCHEDULE", CGI.HTTP_USER_AGENT); –

0

non sono sicuro, ma se l'applicazione correre attraverso scheduler poi cgi.remote_address deve essere uguale per tutte le richieste che è possibile tenere traccia ..... e segnare "isSchedule" ....

+0

Tuttavia, se si porta il codice su un server diverso, è necessario codificare manualmente quel server. Ho finito per controllare http_user_agent E controllando remote_address per vedere se era locale (vedi il codice in modifica alla domanda originale). Grazie. –

0

È prassi comune consentire all'utilità di pianificazione di eseguire un elenco di attività che nella terna attivano le attività effettive. Cioè hai eseguito "dailytask.cfm che include l'attività che desideri eseguire.Puoi ora aggiungere url.parameters o altre cose ad esso per identificare la fonte del trigger.

1

Io nido la mia logica Application.cfm in un file cfif , che verifica se un parametro ('cron') è definito.Se lo è, salta tutto il resto della logica in Application come autenticazione, crap di intestazione, ecc.

Poi quando ho impostato il attività pianificate Passo l'URL che voglio colpire con il parametro cron (http://mysite.com/scheduledtasks.cfm?cron=yo)

Problemi correlati