In the onSessionEnd method you cannot use the session scope since -
technically - the session has ended. ColdFusion passes the session as
an attribute to the method. So instead of using session.foo for
example, you would use arguments.mysession.foo, if you had done this
in the method:
<cfargument name="mysession">
The same applies for the application scope. You also have a similar
situation with onApplicationEnd - you use a copy of the application
scope passed in.
On 12/23/06, Jean-Michel Godin-Duguay
<[EMAIL PROTECTED]> wrote:
> What i'm trying to do is to migrate my existing Application.cfm to
> Application.cfc in order to use the OnSessionEnd method since i need to
> delete records from my database when the user session end.
>
> Here's my Application.cfm:
>
> <cfapplication name="thermopak"
> sessionmanagement="yes"
> sessiontimeout="#CreateTimeSpan(0,0,30,0)#"
> clientmanagement="yes">
>
> <cflock timeout="10" scope="APPLICATION" type="EXCLUSIVE">
> <cfif NOT isDefined("Application.UsersInfo")>
> <cfset Application.UsersInfo = StructNew()>
> </cfif>
> </cflock>
>
> <cflock name="#CreateUUID()#" timeout="15" type="EXCLUSIVE">
> <cfset user_cfid = Evaluate(CFID)>
> <cfset user_time = Now()>
> </cflock>
>
> <cflock scope="APPLICATION" type="EXCLUSIVE" timeout="15">
> <cfif NOT StructKeyExists(Application.UsersInfo, user_cfid)>
> <cfset temp = StructInsert(Application.UsersInfo, user_cfid, user_time)>
> </cfif>
> </cflock>
>
> <cflock scope="APPLICATION" type="EXCLUSIVE" timeout="15">
> <cfloop collection="#Application.UsersInfo#" item="itmUser">
> <cfif Evaluate(DateDiff("n", StructFind(Application.UsersInfo, itmUser),
> Now())) GT 10>
> <cfset StructDelete(Application.UsersInfo, itmUser)>
> </cfif>
> </cfloop>
> </cflock>
>
> <cfif NOT IsDefined("session.visitor_id")>
> <cfquery name="addvisitor" datasource="thermopak">
> insert into
> visitors(CFID, CFTOKEN)
> values(#CFID#,'#CFTOKEN#')
> </cfquery>
>
> <cfquery name="getvisitorid" datasource="thermopak" maxrows="1">
> select * from
> visitors
> order by visitor_id desc
> </cfquery>
>
> <cfset session.visitor_id = getvisitorid.visitor_id>
> </cfif>
>
> Here's my Application.cfc (not working):
>
> <cfcomponent>
>
> <cfscript>
> this.name = "thermopak";
> this.clientmanagement= "yes";
> this.sessionmanagement = "yes";
> this.sessiontimeout = createTimeSpan(0,0,30,0);
> </cfscript>
>
> <cffunction name="onApplicationStart" output="false">
> <cfif NOT IsDefined("session.visitor_id")>
> <cfquery name="addvisitor" datasource="thermopak">
> insert into
> visitors(CFID, CFTOKEN)
> values(#CFID#,'#CFTOKEN#')
> </cfquery>
>
> <cfquery name="getvisitorid" datasource="thermopak" maxrows="1">
> select * from
> visitors
> order by visitor_id desc
> </cfquery>
>
> <cfset session.visitor_id = getvisitorid.visitor_id>
> </cfif>
> </cffunction>
>
>
> <cffunction name="onSessionEnd" output="false">
> <cfargument name = "sessionScope" required=true/>
> <cfargument name = "applicationScope" required=true/>
>
> <cfquery name="DeleteCartItems" datasource="thermopak">
> delete *
> from webcart
> where visitor_id = #session.visitor_id#
> </cfquery>
>
> <cfquery name="DeleteVisitors" datasource="thermopak">
> delete *
> from visitors
> where visitor_id = #session.visitor_id#
> </cfquery>
> </cffunction>
>
> </cfcomponent>
>
> As you can see i added the OnSessionEnd method, i think the syntax is ok but
> if not i would appreciate someone to let me know about it. The major problem
> is that part of code:
>
> <cffunction name="onApplicationStart" output="false">
> <cfif NOT IsDefined("session.visitor_id")>
> <cfquery name="addvisitor" datasource="thermopak">
> insert into
> visitors(CFID, CFTOKEN)
> values(#CFID#,'#CFTOKEN#')
> </cfquery>
>
> <cfquery name="getvisitorid" datasource="thermopak" maxrows="1">
> select * from
> visitors
> order by visitor_id desc
> </cfquery>
>
> <cfset session.visitor_id = getvisitorid.visitor_id>
> </cfif>
> </cffunction>
>
> It doesn't seems to work at all, even if the session.visitor_id is undefined,
> but in my Application.cfm it works may be i'm using the wrong method but i'm
> not recieving any error or anything. Also i didn't include that part of code
> found in my Application.cfm file since i don't know in wich method to put it
> or if the syntax is correct:
>
> <cflock timeout="10" scope="APPLICATION" type="EXCLUSIVE">
> <cfif NOT isDefined("Application.UsersInfo")>
> <cfset Application.UsersInfo = StructNew()>
> </cfif>
> </cflock>
>
> <cflock name="#CreateUUID()#" timeout="15" type="EXCLUSIVE">
> <cfset user_cfid = Evaluate(CFID)>
> <cfset user_time = Now()>
> </cflock>
>
> <cflock scope="APPLICATION" type="EXCLUSIVE" timeout="15">
> <cfif NOT StructKeyExists(Application.UsersInfo, user_cfid)>
> <cfset temp = StructInsert(Application.UsersInfo, user_cfid, user_time)>
> </cfif>
> </cflock>
>
> <cflock scope="APPLICATION" type="EXCLUSIVE" timeout="15">
> <cfloop collection="#Application.UsersInfo#" item="itmUser">
> <cfif Evaluate(DateDiff("n", StructFind(Application.UsersInfo, itmUser),
> Now())) GT 10>
> <cfset StructDelete(Application.UsersInfo, itmUser)>
> </cfif>
> </cfloop>
> </cflock>
>
>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Create robust enterprise, web RIAs.
Upgrade & integrate Adobe Coldfusion MX7 with Flex 2
http://ad.doubleclick.net/clk;56760587;14748456;a?http://www.adobe.com/products/coldfusion/flex2/?sdid=LVNU
Archive:
http://www.houseoffusion.com/groups/CF-Newbie/message.cfm/messageid:2377
Subscription: http://www.houseoffusion.com/groups/CF-Newbie/subscribe.cfm
Unsubscribe:
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.15