onSessionEnd

Description

Runs when a session ends.

Syntax

<cffunction name="onSessionEnd" returnType="void"> 
    <cfargument name="SessionScope" required=True/> 
    <cfargument name="ApplicationScope" required=False/> 
    ... 
</cffunction>

See also

onSessionStart, Method summary, Managing sessions in Application.cfc in the Developing ColdFusion Applications

Parameters

ColdFusion passes the following parameters to the method:

Parameter

Description

SessionScope

The Session scope

ApplicationScope

The Application scope

Returns

This method does not return a value; do not use the cfreturn tag.

Usage

Use this method for any clean-up activities when the session ends. A session ends when the session is inactive for the session time-out period. You can, for example, save session-related data, such as shopping cart contents or whether the user has not completed an order, in a database, or do any other required processing based on the user’s status. You might also want to log the end of the session, or other session-related information, to a file for diagnostic use.

If you call this method explicitly, ColdFusion does not end the session; it does execute the method code, but does not lock the Session.

You cannot use this method to display data on a user page, because it is not associated with a request.

You can access shared scope variables as follows:

  • Use the SessionScope parameter to access the Session scope. You cannot reference the Session scope directly; for example, use Arguments.SessionScope.myVariable, not Session.myVariable.

  • You must use the ApplicationScope parameter to access the Application scope. You cannot reference the Application scope directly; for example, use Arguments.ApplicationScope.myVariable, not Application.myVariable. Use a named lock when you reference variables in the Application scope, as shown in the example.

  • You can access the Server scope directly; for example, Server.myVariable.

  • You cannot access the Request scope.

Sessions do not end, and the onSessionEnd method is not called when an application ends. The onSessionEnd does not execute if there is no active application, however.

Example

The following method decrements an Application scope session count variable and logs the session length.

<cffunction name="onSessionEnd"> 
    <cfargument name = "SessionScope" required=true/> 
    <cfargument name = "AppScope" required=true/> 
    <cfset var sessionLength = TimeFormat(Now() - SessionScope.started, 
        "H:mm:ss")> 
    <cflock name="AppLock" timeout="5" type="Exclusive"> 
        <cfset Arguments.AppScope.sessions = Arguments.AppScope.sessions - 1> 
    </cflock> 
    <cflog file="#This.Name#" type="Information"  
        text="Session #Arguments.SessionScope.sessionid# ended. Length: #sessionLength# Active sessions: #Arguments.AppScope.sessions#"> 
</cffunction>