I had a client that had hundreds of session variables
scattered in hundreds of CF pages. There was very little CFLOCKing,
and consequently the apps were quite unstable in a loaded
environment.
What I finally did was to copy the session scope variables to
ses.request scope variables of the same name, then did a global
replace of session. with ses.request. In OnRequestEnd.cfm, and
immediately before all CFLOCATIONs, I copied ths ses.request scope
back to session scope (locked, of course). There was no measurable
performance hit, and the apps were rock solid.
Perhaps you could copy your client variables to session
scope; then back again in OnRequestEnd.cfm