2011-07-22 16 views
5

Có cách nào để ứng dụng ColdFusion biết liệu nó đang được chạy từ trình lên lịch so với trình duyệt không? Lý tưởng nhất, tôi muốn thiết lập một cờ Session, ví dụ "isScheduled" trong Application.cfm được sử dụng trong suốt ứng dụng.Coldfusion: Phát hiện xem có được chạy bởi người lập lịch biểu

EDIT tôi đã kết thúc kiểm tra các đại lý người dùng, và rằng nó đang được cài đặt trên server (để cải thiện bảo mật), và (vì nó đang chạy trong Application.cfm) rằng trang này là trong thư mục đó cho phép lập lịch trình:

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

Tại sao bạn không thể chuyển thông số chuỗi truy vấn một cách đơn giản và đưa ra quyết định – Candide

+1

Một trong những cách sử dụng cho lá cờ sẽ là bỏ qua việc sử dụng r xác thực (trong đó sử dụng một chuyển hướng đến một trang cấp dịch vụ xác thực cấp doanh nghiệp) khi được chạy bởi bộ lập lịch, nhưng yêu cầu xác thực tất cả các lần khác. Mặc dù tôi sẽ là người duy nhất biết được tham số truy vấn để bao gồm, nó sẽ mở ra một con đường có thể cho hacking, mà tôi thà tránh. –

+2

Kiểm tra tác nhân người dùng không an toàn hơn. Tôi có thể dễ dàng thay đổi tác nhân người dùng của mình trong FireFox - thậm chí có cả Trình bổ sung tác nhân người dùng bổ sung để dễ thay đổi. Tôi làm điều này tất cả thời gian để thử nghiệm. – Yisroel

Trả lời

4

Kiểm tra tác nhân người dùng. Tác nhân người dùng là "CFSCHEDULE" nhưng vui lòng xác nhận điều này trước tiên.

+0

Cảm ơn. Điều đó hoạt động. Những gì tôi đã kết thúc với: Request.isScheduled = FindNoCase ("CFSCHEDULE", CGI.HTTP_USER_AGENT); –

0

tôi không chắc chắn nhưng nếu ứng dụng chạy thông qua lịch trình sau đó cgi.remote_address phải tương tự cho tất cả các yêu cầu mà bạn có thể theo dõi ..... và đánh dấu "isSchedule" ....

+0

Tuy nhiên, nếu bạn mã cổng đến một máy chủ khác, bạn phải tự tay mã hóa máy chủ đó. Tôi đã kết thúc kiểm tra http_user_agent VÀ kiểm tra remote_address để xem nếu nó là địa phương (xem mã trong chỉnh sửa để câu hỏi ban đầu). Cảm ơn. –

0

Đó là một thực tế phổ biến để cho phép trình lên lịch nhiệm vụ chạy một danh sách các tác vụ trong tern kích hoạt các tác vụ thực tế. I E. bạn chạy "dailytask.cfm mà cfincludes nhiệm vụ mà bạn muốn chạy.Bây giờ bạn có thể thêm url.parameters hoặc những thứ khác vào nó để xác định nguồn kích hoạt.

1

Tôi lồng logic Application.cfm của mình trong một cfif , để kiểm tra xem thông số ('cron') có được xác định hay không, nếu có, thì nó bỏ qua tất cả phần còn lại của logic trong Ứng dụng như xác thực, tiêu đề crap, v.v.

Sau đó, khi tôi thiết lập các tác vụ được lập lịch tôi chuyển vào URL mà tôi muốn nhấn với thông số cron (http://mysite.com/scheduledtasks.cfm?cron=yo)

Các vấn đề liên quan