2016-07-26 3 views
2

Проблема:Переменные приложения не сохранялось

У меня есть 2 файла в той же папке:

  • index.cfm
  • Application.cfc

Мой index.cfm пуст и ниже - мой application.cfc код:

<cfcomponent> 
    <cffunction name="onApplicationStart"> 
     <cfapplication name="TimeHistory" clientmanagement="No" sessionmanagement="No" setclientcookies="Yes" /> 

     <cflock scope="application" type="exclusive" timeout=10>    
      <cfset application.test = "xxxxxxxxxxxxxx"> 
     </cflock> 
     <cfreturn true /> 
    </cffunction> 


    <cffunction name="onRequestStart"> 
     <cfdump var="#application#" label="before">  
     <cfif structKeyExists(URL, "restart")>   
      <cfset onApplicationStart()> 
     </cfif> 
     <cfdump var="#application#" label="after"> 
     <cfabort>  
    </cffunction> 
</cfcomponent> 

Как вы можете видеть, я устанавливаю переменную test в application scope.

Когда я называю страницу с ?restart URL PARAM запроса, это выход:

URL:../index.cfm?restart

enter image description here

Затем я удалил ?reset URL PARAM запроса и загрузка страница, это выход:

URL:../index.cfm

enter image description here

Вопрос:

Если не установили переменную как часть первого вызова и затем сохраняется для будущих вызовов? Как я могу это сделать?

+4

Нет. Это неправильный способ установить имя приложения. Не используйте ''. Этот тег предназначен для использования с файлом Application.cfm. Вместо этого задайте имя приложения внутри тега 'cfcomponent' перед тем, как кто-либо вызовет функцию, то есть' 'См. Пример здесь http://blog.strikefish.com/blog/index .cfm? mode = entry & entry = 585F0E1E-E19B-31A5-4357446E2AF47653 – Leigh

+3

* установить имя приложения внутри тега cfcomponent, прежде чем какая-либо из функций вызовет ... * ... Как и любые другие параметры приложения (setclientcookies, sessionmanagment, ...) конечно. – Leigh

ответ

4

На основании комментария + Leigh, я изменил свой код, который теперь работает. Оставляя это здесь как решение. Спасибо Leigh :)

<cfcomponent> 
    <cfscript> 
     this.name = "TimeHistory"; 
     this.clientmanagement= "no"; 
     this.sessionmanagement = "no"; 
     this.setClientCookies = "no"; 
     this.setDomainCookies = "no"; 
    </cfscript> 
    <cffunction name="onApplicationStart">     
     <cflock scope="application" type="exclusive" timeout=10>    
      <cfset application.test = "xxxxxxxxxxxxxx"> 
     </cflock> 
     <cfreturn true /> 
    </cffunction> 


    <cffunction name="onRequestStart"> 
     <cfdump var="#application#" label="before">  
     <cfif structKeyExists(URL, "restart")>   
      <cfset onApplicationStart()> 
     </cfif> 
     <cfdump var="#application#" label="after"> 
     <cfabort>  
    </cffunction> 
</cfcomponent> 
+0

Спасибо за публикацию окончательного кода. Боковое замечание, хотя оно работает в любом случае, вы также можете придерживаться всего cfml и заменять секцию cfscript отдельными операторами cfset :) – Leigh

+0

В чем причина отдельных cfsets, а не cfscript? –

+0

Нет причин, кроме предпочтений. Я видел нескольких людей, которые ошибочно полагали, что настройки приложения * должны быть выполнены с помощью cfscript ;-) Просто указывая, что это не требование. Использование всех CFML, а не смешивания и соответствия, также работает. – Leigh

Смежные вопросы