Listing 1
<!--- Application.cfm--->
<cfapplication name="myApp" clientmanagement="Yes"
clientstorage="testDB"
sessionmanagement="Yes"
sessiontimeout="#CreateTimeSpan(0, 0, 15, 0)#">
<cfset request.datasource = "TestDB";
<!--- Default customization settings --->
<cfparam name="client.email" default="">
<cfparam name="client.fname" default="">
<cfparam name="client.lname" default="">
<cfparam name="client.bgColor"
default="##ffffff">
<cfparam name="client.fontColor"
default="##000000">
<cfparam name="client.fontFamily" default="Arial,
Helvetica, sans-serif;">
<cfparam name="client.heroSort" default="lname">
<cflock scope="session" type="readonly" timeout="5">
<cfif isDefined("session.isLoggedIn")>
<cfset request.isLoggedIn = "y"
<cfelse>
<cfset request.isLoggedIn = "n">
</cfif>
</cflock>
Listing 2
create table Users
(
email nvarchar(40) not null,
password nvarchar(20) not null,
fname nvarchar(50) not null,
lname nvarchar(50) not null,
subscribe int null ,
telephone nvarchar(14) null ,
extension nvarchar(10) null ,
preferences ntext null ,
constraint PK_Users primary key clustered (email)
)
Listing 3
<!--- login.cfm (excerpt) --->
<cfquery name="exists"
datasource="#request.datasource#" maxrows="1">
select email, fname, lname
from Users
where email = '#trim(form.email)#' and
password = '#trim(form.password)#'
</cfquery>
<cfif exists.RecordCount>
<!--- Successful login --->
<cfset client.fname = exists.fname>
<cfset client.lname = exists.lname>
<cflock scope="session" type="exclusive"
timeout="5">
<cfset session.isLoggedIn = "y">
<cfset request.isLoggedIn = "y">
</cflock>
<cfinclude template="retrieveClientVars.cfm">
</cfif>
Listing 4
<!--- retrieveClientVars.cfm --->
<cfquery name="retrievePrefs"
datasource="#request.datasource#">
select preferences from Users
where email = '#trim(client.email)#'
</cfquery>
<cfif retrievePrefs.Recordcount and
retrievePrefs.preferences NEQ "">
<cfwddx action="wddx2cfml"
input="#retrievePrefs.preferences#"
output="variables.prefStruct">
<cfloop collection="#variables.prefStruct#"
item="clientVar">
<cfset "client.#clientvar#" =
StructFind(Variables.prefStruct, clientVar)>
</cfloop>
</cfif>
Listing 5
<!--- setCustomizations.cfm --->
<!---
This template must be included on EVERY
page that sets client variables or else
included in OnRequestEnd.cfm to ensure
that all client variable changes are saved
--->
<cfset variables.prefStruct = StructNew()>
<cfloop list="#GetClientVariablesList()#"
index="i">
<cfset tmp = StructInsert(variables.prefStruct,
"#i#", "#evaluate(i)#", true)>
</cfloop>
<cfwddx action="cfml2wddx"
input="#variables.prefStruct#"
output="variables.prefWDDX">
<cfquery name="updatePrefs"
datasource="#request.datasource#">
update Users
set preferences = '#trim(variables.prefWDDX)#'
where email = '#trim(client.email)#'
</cfquery>