Application variables are available to all pages within an application, that is, pages that have the same application name. Because application variables are persistent, you easily can pass values between pages. You can use application variables for information including the application name, background color, data source names, or contact information.
You set the application name in the cfapplication tag, normally on your application's Application.cfm page. The application name is stored in the Application.applicationName variable.
Unlike client and session variables, application variables do not require that a client name (client ID) be associated with them. They are available to any clients that use pages in the application.
Note: Place code that uses application variables inside cflock tags in circumstances that could result in race conditions from multiple accesses to the same variable. For information on using cflock tags, see Locking code with cflock.
Configuring and enabling application variables
To use application variables, do the following:
- Ensure that they are enabled in the ColdFusion Administrator. (They are enabled by default.)
- Specify the application name by setting the This.name variable in the initialization code of the Application.cfc or by setting the name attribute of the cfapplication tag for the current page.
Note: ColdFusion supports unnamed applications for compatibility with J2EE applications. For more information, see Unnamed ColdFusion Application and Session scopes in Interoperating with JSP pages and servlets
The ColdFusion Administrator also lets you specify the following information:
- A default variable time-out. If all pages in an application are inactive for the time-out period, ColdFusion deletes all the application variables. The Application.cfc file or cfapplication tag can override this value for a specific application. The default value for this time-out is two days.
- A maximum time-out. The application code cannot set a time-out greater than this value. The default value for this time-out is two days.
You can set the time-out period for application variables within a specific application by using the This.applicationTimeout variable of Application.cfc or the applicationTimeout attribute of the cfapplication tag.
Storing application data in application variables
Application variables are a convenient place to store information that all pages of your application might need, no matter which client is running that application. Using application variables, an application could, for example, initialize itself when the first user accesses any page of that application. This information can then remain available indefinitely, thereby avoiding the overhead of repeated initialization.
Because the data stored in application variables is available to all pages of an application, and remains available until a specific period of inactivity passes or the ColdFusion server shuts down, application variables are convenient for application-global, persistent data.
However, because all clients running an application see the same set of application variables, these variables are not appropriate for client-specific or session-specific information. To target variables for specific clients, use client or session variables.
Using application variables
Generally, application variables hold information that you write infrequently. In most cases, the values of these variables are set once, most often when an application first starts. Then the values of these variables are referenced many times throughout the life of the application or the course of a session.
In circumstances that could result in race conditions from multiple accesses to the same variable, place code that writes to Application scope variables or reads Application scope variables with data that can change inside cflock tags.
Because each Application scope variable is shared in memory by all requests in the application, these variables can become bottlenecks if used inappropriately. Whenever a request is reading or writing an Application scope variable, any other requests that use the variable must wait until the code accessing the variable completes. This problem is increased by the processing time required for locking. If many users access the application simultaneously and you use Application scope variables extensively, your application performance might degrade. If your application uses many application variables, consider whether the variables must be in the Application scope or whether they can be Session or Request scope variables.
The application scope has one built-in variable, Application.applicationName, which contains the application name you specify in the cfapplication tag.
Access and manipulate application variables the same way you use session variables, except that you use the variable prefix Application, not Session, and specify Session as the lock scope. For examples of using session variables see Creating and deleting session variables and Accessing and changing session variables in Configuring and using session variables. For information on locking write-once read-many application variables efficiently, see Locking application variables efficiently in Locking code with cflock.