I received an interesting challenge today from my boss.
We recently switched from requiring people to be logged into the site to read our articles to being open, and only requiring logins to comment. Because of the previous restriction and a large amount of our audience being corporate users with cookies disabled, we have URLSessionFormat wrapping all of our internal links spread out over a few template pages, over a few of our sites. Now that we don’t have to be as careful about checking logins it would be better to make sure all of our urls are cleaner (i.e. not having the session information appended to it). My boss wanted to avoid having to edit all of those files. So that challenge to me was to figure out how to override c and make sure our urls were clean.
After fiddling with getPageContext to no avail I settled on this solution:
- Grab the page content in Application.cfc:onRequest()
- Replace any reference to the jsessionid in the page.
- Output the page as intended
<cffunction
name=“onRequest”
output=“TRUE”
access=“public”
>
<cfargument
name=“thePage”
type=“string”
required=“true”>
<cfset
var pageContent = “”>
<cfset
var token = “;jsessionid=#session.sessionid#”>
<cfsavecontent
variable=“pageContent”>
<cfinclude
template=“#arguments.thePage#”>
</cfsavecontent>
<cfset pageContent = Replace(pageContent, token, “”, “ALL”) />
<cfoutput>#pageContent#</cfoutput>
</cffunction>
It’s not bad, and it doesn’t add a tremendous amount of overhead to every page, and would have worked if this was imperative to do. We decided however that string processing every single request was probably not preferable to just finding and replacing all of the URLSessionFormat() references.