@@ -307,10 +307,9 @@ component {
307
307
public void function frameworkTrace ( string message ) {
308
308
if ( request ._fw1 .doTrace ) {
309
309
try {
310
- if ( isDefined ( ' session._fw1_trace' ) &&
311
- structKeyExists ( session , ' _fw1_trace' ) ) {
312
- request ._fw1 .trace = session ._fw1_trace ;
313
- structDelete ( session , ' _fw1_trace' );
310
+ if ( sessionHas ( ' _fw1_trace' ) ) {
311
+ request ._fw1 .trace = sessionRead ( ' _fw1_trace' );
312
+ sessionDelete ( ' _fw1_trace' );
314
313
}
315
314
} catch ( any _ ) {
316
315
// ignore if session is not enabled
@@ -1118,7 +1117,7 @@ component {
1118
1117
if ( request ._fw1 .doTrace ) {
1119
1118
internalFrameworkTrace ( ' redirecting to #targetURL # (#statusCode #)' );
1120
1119
try {
1121
- session . _fw1_trace = request ._fw1 .trace ;
1120
+ sessionWrite ( ' _fw1_trace' , request ._fw1 .trace ) ;
1122
1121
} catch ( any _ ) {
1123
1122
// ignore exception if session is not enabled
1124
1123
}
@@ -1157,7 +1156,7 @@ component {
1157
1156
if ( request ._fw1 .doTrace ) {
1158
1157
internalFrameworkTrace ( ' redirecting to #targetURL # (#statusCode #)' );
1159
1158
try {
1160
- session . _fw1_trace = request ._fw1 .trace ;
1159
+ sessionWrite ( ' _fw1_trace' , request ._fw1 .trace ) ;
1161
1160
} catch ( any _ ) {
1162
1161
// ignore exception if session is not enabled
1163
1162
}
@@ -1229,6 +1228,32 @@ component {
1229
1228
return builder ;
1230
1229
}
1231
1230
1231
+ public void function sessionDefault ( string keyname , string defaultValue ) {
1232
+ param name = " session['#key name #']" default = " #defaultValue #" ;
1233
+ }
1234
+
1235
+ public void function sessionDelete ( string keyname ) {
1236
+ structDelete ( session , key name );
1237
+ }
1238
+
1239
+ public boolean function sessionHas ( string keyname ) {
1240
+ return isDefined ( ' session.#key name #' ) && structKeyExists ( session , key name );
1241
+ }
1242
+
1243
+ public void function sessionLock ( required function callback ) {
1244
+ lock scope = " session" type = " exclusive" timeout = " 30" {
1245
+ callback ();
1246
+ }
1247
+ }
1248
+
1249
+ public any function sessionRead ( string keyname ) {
1250
+ return session [ key name ];
1251
+ }
1252
+
1253
+ public void function sessionWrite ( string keyname , any keyvalue ) {
1254
+ session [ key name ] = key value ;
1255
+ }
1256
+
1232
1257
/*
1233
1258
* call this from your setupApplication() method to tell the framework
1234
1259
* about your bean factory - only assumption is that it supports:
@@ -1803,26 +1828,24 @@ component {
1803
1828
var nextPreserveKey = ' ' ;
1804
1829
var oldKeyToPurge = ' ' ;
1805
1830
try {
1806
- if ( variables .framework .maxNumContextsPreserved > 1 ) {
1807
- lock scope = " session" type = " exclusive" timeout = " 30" {
1808
- param name = " session.__fw1NextPreserveKey" default = " 1" ;
1809
- nextPreserveKey = session .__fw1NextPreserveKey ;
1810
- session .__fw1NextPreserveKey = session .__fw1NextPreserveKey + 1 ;
1811
- }
1812
- oldKeyToPurge = nextPreserveKey - variables .framework .maxNumContextsPreserved ;
1813
- } else {
1814
- lock scope = " session" type = " exclusive" timeout = " 30" {
1815
- session .__fw1PreserveKey = ' ' ;
1816
- nextPreserveKey = session .__fw1PreserveKey ;
1831
+ sessionLock (function (){
1832
+ if ( variables .framework .maxNumContextsPreserved > 1 ) {
1833
+ sessionDefault ( ' __fw1NextPreserveKey' , 1 );
1834
+ nextPreserveKey = sessionRead ( ' __fw1NextPreserveKey' );
1835
+ sessionWrite ( ' __fw1NextPreserveKey' , nextPreserveKey + 1 );
1836
+ oldKeyToPurge = nextPreserveKey - variables .framework .maxNumContextsPreserved ;
1837
+ } else {
1838
+ nextPreserveKey = ' ' ;
1839
+ sessionWrite ( ' __fw1PreserveKey' , nextPreserveKey );
1840
+ oldKeyToPurge = ' ' ;
1817
1841
}
1818
- oldKeyToPurge = ' ' ;
1819
- }
1842
+ });
1820
1843
} catch ( any e ) {
1821
1844
// ignore - assume session scope is disabled
1822
1845
}
1823
1846
var key = getPreserveKeySessionKey ( oldKeyToPurge );
1824
- if ( structKeyExists ( session , key ) ) {
1825
- structDelete ( session , key );
1847
+ if ( sessionHas ( key ) ) {
1848
+ sessionDelete ( key );
1826
1849
}
1827
1850
return nextPreserveKey ;
1828
1851
}
@@ -1861,10 +1884,9 @@ component {
1861
1884
private void function internalFrameworkTrace ( string message , string subsystem = ' ' , string section = ' ' , string item = ' ' , string traceType = ' INFO' ) {
1862
1885
if ( request ._fw1 .doTrace ) {
1863
1886
try {
1864
- if ( isDefined ( ' session._fw1_trace' ) &&
1865
- structKeyExists ( session , ' _fw1_trace' ) ) {
1866
- request ._fw1 .trace = session ._fw1_trace ;
1867
- structDelete ( session , ' _fw1_trace' );
1887
+ if ( sessionHas ( ' _fw1_trace' ) ) {
1888
+ request ._fw1 .trace = sessionRead ( ' _fw1_trace' );
1889
+ sessionDelete ( ' _fw1_trace' );
1868
1890
}
1869
1891
} catch ( any _ ) {
1870
1892
// ignore if session is not enabled
@@ -2293,16 +2315,16 @@ component {
2293
2315
var preserveKeySessionKey = getPreserveKeySessionKey ( ' ' );
2294
2316
}
2295
2317
try {
2296
- if ( structKeyExists ( session , preserveKeySessionKey ) ) {
2297
- structAppend ( request .context , session [ preserveKeySessionKey ] , false );
2318
+ if ( sessionHas ( preserveKeySessionKey ) ) {
2319
+ structAppend ( request .context , sessionRead ( preserveKeySessionKey ) , false );
2298
2320
if ( variables .framework .maxNumContextsPreserved == 1 ) {
2299
2321
/*
2300
2322
When multiple contexts are preserved, the oldest context is purged
2301
2323
within getNextPreserveKeyAndPurgeOld once the maximum is reached.
2302
2324
This allows for a browser refresh after the redirect to still receive
2303
2325
the same context.
2304
2326
*/
2305
- structDelete ( session , preserveKeySessionKey );
2327
+ sessionDelete ( preserveKeySessionKey );
2306
2328
}
2307
2329
}
2308
2330
} catch ( any e ) {
@@ -2313,17 +2335,22 @@ component {
2313
2335
private string function saveFlashContext ( string keys ) {
2314
2336
var curPreserveKey = getNextPreserveKeyAndPurgeOld ();
2315
2337
var preserveKeySessionKey = getPreserveKeySessionKey ( curPreserveKey );
2338
+ var tmpSession = ' ' ;
2316
2339
try {
2317
- param name = " session.# preserveKeySessionKey # " default = " # { } # " ;
2340
+ sessionDefault ( preserveKeySessionKey , {} ) ;
2318
2341
if ( key s == ' all' ) {
2319
- structAppend ( session [ preserveKeySessionKey ], request .context );
2342
+ tmpSession = sessionRead ( preserveKeySessionKey );
2343
+ structAppend ( tmpSession , request .context );
2344
+ sessionWrite ( preserveKeySessionKey , tmpSession );
2320
2345
} else {
2321
2346
var key = 0 ;
2322
2347
var key Names = listToArray ( key s );
2323
2348
for ( key in key Names ) {
2324
2349
key = trim ( key );
2325
2350
if ( structKeyExists ( request .context , key ) ) {
2326
- session [ preserveKeySessionKey ][ key ] = request .context [ key ];
2351
+ tmpSession = sessionRead ( preserveKeySessionKey );
2352
+ tmpSession [ key ] = request .context [ key ];
2353
+ sessionWrite ( preserveKeySessionKey , tmpSession );
2327
2354
} else {
2328
2355
internalFrameworkTrace ( message = ' key "#key #" does not exist in RC, cannot preserve.' , traceType = ' WARNING' );
2329
2356
}
0 commit comments