ColdFusion = Ошибка по запросу

Просматривая журналы, мы получаем сотни следующих

"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, и это заставляет меня выдергивать те маленькие волосы, которые у меня остались.


person pee2pee    schedule 21.08.2012    source источник
comment
Также Element STRMEMBER is undefined in SESSION   -  person pee2pee    schedule 23.08.2012
comment
Второй - Element STRMEMBER is undefined in SESSION - скорее всего, вызывает вашу ошибку: произошло исключение при вызове метода обработчика событий из ... Вероятно, лучшим подходом было бы установить по умолчанию пустую строку.   -  person Germann Arlington    schedule 23.08.2012
comment
<cffunction name="onSessionStart"> <cfscript> session.strMember = StructNew(); session.strMember.iMemberId = 0; session.strMember.lSecurityLevels = "Guest"; </cfscript>... это где/как это установлено   -  person pee2pee    schedule 23.08.2012
comment
Хорошо, кажется, ошибка указывает на Element XMLZONE is undefined in REQUEST., а код <cfscript> variables.aZoneInfo = XmlSearch(application.xmlZones, "//zone[position() = 1]"); try { request.xmlZone = ToString(variables.aZoneInfo[1]); } catch(any expt){ variables.objZoneDAO = CreateObject("component", "#application.sComponentDir#ZoneDAO").init(application.sDSN); variables.objZoneDAO.Read(variables.objZone, 1); } </cfscript>. Это случается только со случайными ботами. Файл XML есть и работает для всех пользователей. Любые идеи?   -  person pee2pee    schedule 08.09.2012


Ответы (3)


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) Убедитесь, что пути для всех инклюзов указаны правильно и в них самих нет ошибок.

Упрощайте свой метод, пока не перестанете получать ошибку, а затем исследуйте, что именно вызывает ее.

person Germann Arlington    schedule 21.08.2012
comment
Я перенял этот проект у компании, которая начала его, но не закончила, а затем у двух последующих разработчиков без CF (таких как я), которые его модифицировали :-( Я попробую то, что вы предложили. Спасибо! - person pee2pee; 21.08.2012
comment
Хорошо, избавился от нескольких проблем и главная (из нескольких) Element STRMEMBER is undefined in SESSION в первую очередь для поисковых ботов. Рассматриваемый код, который, как мне кажется, не работает, это ‹cfset request.strMember = Duplicate(session.strMember). - person pee2pee; 23.08.2012
comment
Вероятно, лучшим подходом было бы установить пустую строку по умолчанию. - person Germann Arlington; 23.08.2012

Боты заходят на несуществующую страницу?

Может быть, попробуйте изменить последнюю строку на:

<cfif fileExists(expandPath(Arguments.targetPage))>
    <cfinclude template="#Arguments.targetPage#">
<cfelse>
    <cfabort>
</cfif>
person Nicklepedde    schedule 22.08.2012
comment
Они существуют "Error","jrpp-684","08/22/12","20:53:50","08_VIRTUALFESTIVALS","www.virtualfestivals.com/index.cfm?CFTOKEN=14333196&CFID=117847977 Agent:Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp) Error: An exception occurred when invoking a event handler method from Application.cfc. The method name is: onRequest." - person pee2pee; 22.08.2012
comment
Было бы очень полезно, если бы мы могли видеть фактическую ошибку, возможно, попытку/поймать внутри этой функции, которая отправляет вам подробности по электронной почте или регистрирует их. - person Nicklepedde; 23.08.2012
comment
Ошибка показана выше — фиксируем ее в лог-файле. Мы еще не смогли воспроизвести его как пользователя, даже с плагином переключения пользовательского агента FF. Поможет ли публикация содержимого application.cfc? - person pee2pee; 23.08.2012
comment
попробуйте что-то вроде: ‹cffunction name=onRequest›‹cftry›....‹cfcatch›‹cfmail..›‹cfdump var=#cfcatch#›‹/cfmail›‹/cftry›‹/cffunction› ..простите за беспорядок в комментарии, надеюсь, вы поняли идею - person Nicklepedde; 23.08.2012
comment
Хорошо, кажется, ошибка указывает на Element XMLZONE is undefined in REQUEST., а код <cfscript> variables.aZoneInfo = XmlSearch(application.xmlZones, "//zone[position() = 1]"); try { request.xmlZone = ToString(variables.aZoneInfo[1]); } catch(any expt){ variables.objZoneDAO = CreateObject("component", "#application.sComponentDir#ZoneDAO").init(application.sDSN); variables.objZoneDAO.Read(variables.objZone, 1); } </cfscript>. Это случается только со случайными ботами. Файл XML есть и работает для всех пользователей. Любые идеи? - person pee2pee; 08.09.2012

Может быть, вы могли бы определить, являются ли они ботами, и отправить им что-то еще? зависит от того, насколько удобным для поиска вы хотите сделать свой сайт:

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

person Nicklepedde    schedule 23.08.2012