@@ -1303,6 +1303,72 @@ describe('session()', function(){
1303
1303
} ) ;
1304
1304
} ) ;
1305
1305
1306
+ it ( 'should not set an expired cookie on destroyed session if session is regenerated' , function ( done ) {
1307
+ var store = new session . MemoryStore ( ) ;
1308
+ var app = express ( )
1309
+ . use ( session ( { store : store , unset : 'destroy' , secret : 'keyboard cat' , cookie : { maxAge : min } } ) )
1310
+ . use ( function ( req , res , next ) {
1311
+ req . session . count = req . session . count || 0 ;
1312
+ req . session . count ++ ;
1313
+ if ( req . session . count === 2 ) {
1314
+ req . session . destroy ( function ( err ) {
1315
+ if ( err ) return done ( err ) ;
1316
+
1317
+ req . sessionStore . regenerate ( req , function ( err ) {
1318
+ if ( err ) return done ( err ) ;
1319
+
1320
+ req . session . now = Date . now ( ) ;
1321
+ res . end ( ) ;
1322
+ } ) ;
1323
+ } ) ;
1324
+ }
1325
+ else {
1326
+ res . end ( ) ;
1327
+ }
1328
+ } ) ;
1329
+
1330
+ request ( app )
1331
+ . get ( '/' )
1332
+ . expect ( shouldSetCookie ( 'connect.sid' ) )
1333
+ . expect ( 200 , function ( err , res ) {
1334
+ if ( err ) return done ( err ) ;
1335
+
1336
+ var now = new Date ( ) ;
1337
+
1338
+ var expiry = expires ( res ) ;
1339
+ assert . ok ( expiry ) ;
1340
+
1341
+ var a = new Date ( expiry ) ;
1342
+
1343
+ var delta = a . valueOf ( ) - now . valueOf ( ) ;
1344
+ assert . ok ( delta > ( min - 1000 ) && delta <= min ) ;
1345
+
1346
+ request ( app )
1347
+ . get ( '/' )
1348
+ . set ( 'Cookie' , cookie ( res ) )
1349
+ . expect ( shouldSetCookie ( 'connect.sid' ) )
1350
+ . expect ( 200 , function ( err , res ) {
1351
+ if ( err ) return done ( err ) ;
1352
+
1353
+ now = new Date ( ) ;
1354
+
1355
+ expiry = expires ( res ) ;
1356
+ assert . ok ( expiry ) ;
1357
+
1358
+ var b = new Date ( expiry ) ;
1359
+
1360
+ // The session regenerated so the expiration date should be the same as the original
1361
+ delta = b . valueOf ( ) - a . valueOf ( ) ;
1362
+ assert . equal ( delta , 0 ) ;
1363
+
1364
+ delta = b . valueOf ( ) - now . valueOf ( ) ;
1365
+ assert . ok ( delta > 0 ) ;
1366
+
1367
+ done ( ) ;
1368
+ } ) ;
1369
+ } ) ;
1370
+ } ) ;
1371
+
1306
1372
it ( 'should not set cookie if initial session destroyed' , function ( done ) {
1307
1373
var store = new session . MemoryStore ( ) ;
1308
1374
var app = express ( )
0 commit comments