ColdFusion = OnRequest错误

时间:2012-08-21 09:20:39

标签: coldfusion coldfusion-8 application.cfc

查看日志,我们得到以下数百个

"Error","jrpp-185","08/21/12","10:05:43","PATH","www.domain.com 
Agent:Mozilla/4.0 (compatible; Synapse) 
Error: An exception occurred when invoking a event handler method from Application.cfc. 
The method name is: onRequest.

他们似乎主要是搜索机器人。 APplication.cfc上我可以看到对该函数的引用位于

之下
<cffunction name="onRequest" returnType="void">
        <cfargument name="targetPage" type="String" required=true/>
        <cfsetting enablecfoutputonly="yes" requesttimeout="20">

        <cfparam name="url.refresh" default="0">
        <cfset request.strMember = Duplicate(session.strMember)/>

        <cfset request.tNow = GetTickCount()>
        <cfif url.refresh EQ 0>
            <cfset request.iCacheHr = 12/>
        <cfelse>
            <cfset request.iCacheHr = 0/>
        </cfif>

        <cflogin>
            <cfif IsDefined("session.strMember.sRoles")>
                <cfloginuser name="#session.strMember.sFirstName##session.strMember.sLastName#"
                    password="12345"
                    roles="#session.strMember.sRoles#"/>
            </cfif>
        </cflogin>

        <cfinclude template="core/incl/SessionLogger.cfm">
        <cfinclude template="core/incl/LinkTranslator.cfm">
        <cfinclude template="core/incl/udf.cfm">

        <cfinclude template="urlcheck.cfm"/>
        <cfinclude template="#Arguments.targetPage#">
    </cffunction>

从那以后,任何人都可以建议什么是错的以及如何解决它?我对CF很新,这让我拉出了我留下的小头发

3 个答案:

答案 0 :(得分:1)

1)您使用两种不同的编码样式

    <cfparam name="url.refresh" default="0">
    <cfset request.strMember = Duplicate(session.strMember)/>

第一行中无效/保留打开的XML标记,第二行中保留有效(已关闭)的XML标记。 试着坚持一个(最好是最后一个)。

2)您正在使用旧方式检查正在定义的变量

IsDefined("session.strMember.sRoles")

了解更新(更好,更快)

StructKeyExists(session.strMember, "sRoles")

3)您的代码很可能正在调用

<cfloginuser ... >

每个页面请求

4)确保所有包含的路径都是正确的,并且它们本身没有任何错误。

简化您的方法,直到您停止收到错误,然后调查导致错误的原因

答案 1 :(得分:0)

机器人是否击中了不存在的页面?

也许尝试将最后一行更改为:

<cfif fileExists(expandPath(Arguments.targetPage))>
    <cfinclude template="#Arguments.targetPage#">
<cfelse>
    <cfabort>
</cfif>

答案 2 :(得分:0)

也许您可以检测到它们是否是机器人并为其他服务器提供服务?取决于您希望您的网站具有搜索友好性:

http://www.bennadel.com/blog/1083-ColdFusion-Session-Management-And-Spiders-Bots.htm