gsr
01/31/2025, 7:31 PM<!--- Keys to maintain during session changes --->
<cfset keysToKeep = ['username', 'password','LoginEmail','loginReason','oldUser','keySafe','oldUserFullName','loginid','login']>
<!--- Store current session state --->
<cfset currentSession = duplicate(session)>
<!--- Get existing history or create new array --->
<cfset SupportHistory = []>
<cfif structKeyExists(session, "SupportHistory")>
<cfset SupportHistory = duplicate(session.SupportHistory)>
</cfif>
<!--- Get previous user's info --->
<cfset previousUsername = "">
<cfset previousFullName = "">
<cfif arrayLen(SupportHistory)>
<cfset previousData = SupportHistory[arrayLen(SupportHistory)]>
<cfif structKeyExists(previousData, "username")>
<cfset previousUsername = previousData.username>
</cfif>
<cfif structKeyExists(previousData, "login")>
<cfset previousFullName = previousData.login>
</cfif>
</cfif>
<!--- Update current session with previous user's info --->
<cfset currentSession.oldUser = previousUsername>
<cfset currentSession.oldUserFullName = previousFullName>
<!--- Store current user's data --->
<cfset userSnapshot = {}>
<cfloop array="#keysToKeep#" index="key">
<cfif structKeyExists(currentSession, key)>
<cfset userSnapshot[key] = currentSession[key]>
</cfif>
</cfloop>
<!--- Get existing history or create new array --->
<cfset SupportHistory = []>
<cfif structKeyExists(session, "SupportHistory")>
<cfset SupportHistory = duplicate(session.SupportHistory)>
</cfif>
<!--- Add current user to Support history --->
<cfset arrayAppend(SupportHistory, userSnapshot)>
<!--- Clear the session --->
<cfset structClear(session)>
<!--- Restore Support history --->
<cfset session.SupportHistory = SupportHistory>
<!--- Get the most recent user's data --->
<cfif arrayLen(session.SupportHistory)>
<cfset latestUserData = session.SupportHistory[arrayLen(session.SupportHistory)]>
<cfloop collection="#latestUserData#" item="key">
<cfset session[key] = latestUserData[key]>
</cfloop>
</cfif>