Use getApplicationMetadata() for cross-platform session detection in TokenService #251
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Addresses review feedback on #238:
structKeyExists(variables, "session")doesn't reliably detect if session management is enabled across CFML engines.Changes
getApplicationMetadata().sessionManagementinstead ofstructKeyExists()- works on Lucee 5+, ACF 2021+, ACF 2023+, BoxLang 1+variables.appMetadatato avoid repeated lookupssession.sessionidaccess in try-catch to handle startup edge cases where session scope exists but sessionid isn't yet availableImplementation
private function isSessionManagementEnabled() { if ( structIsEmpty( variables.appMetadata ) ) { variables.appMetadata = getApplicationMetadata(); } return structKeyExists( variables.appMetadata, "sessionManagement" ) && variables.appMetadata.sessionManagement; } private function generateNewToken() { var tokenBase = "#createUUID()##getRealIP()##randRange(0, 65535, "SHA1PRNG")##getTickCount()#"; var sessionId = ""; if ( isSessionManagementEnabled() ) { try { sessionId = session.sessionid; } catch ( any e ) { // Continue without sessionid if not available } } return uCase( left( hash( tokenBase & sessionId, "SHA-256" ), 40 ) ); }Enables TokenService to work with both SessionCSRFStorage (requires sessions) and CacheCSRFStorage (session-independent).
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.