File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ unreleased
2+ ==========
3+
4+ * Fix resaving already-saved reloaded session at end of request
5+
161.14.2 / 2016-10-30
27===================
38
Original file line number Diff line number Diff line change @@ -364,14 +364,30 @@ function session(options) {
364364
365365 // wrap session methods
366366 function wrapmethods ( sess ) {
367+ var _reload = sess . reload
367368 var _save = sess . save ;
368369
370+ function reload ( callback ) {
371+ debug ( 'reloading %s' , this . id )
372+ _reload . call ( this , function ( ) {
373+ wrapmethods ( req . session )
374+ callback . apply ( this , arguments )
375+ } )
376+ }
377+
369378 function save ( ) {
370379 debug ( 'saving %s' , this . id ) ;
371380 savedHash = hash ( this ) ;
372381 _save . apply ( this , arguments ) ;
373382 }
374383
384+ Object . defineProperty ( sess , 'reload' , {
385+ configurable : true ,
386+ enumerable : false ,
387+ value : reload ,
388+ writable : true
389+ } )
390+
375391 Object . defineProperty ( sess , 'save' , {
376392 configurable : true ,
377393 enumerable : false ,
Original file line number Diff line number Diff line change @@ -1714,6 +1714,42 @@ describe('session()', function(){
17141714 } )
17151715 } )
17161716 } )
1717+
1718+ it ( 'should prevent end-of-request save on reloaded session' , function ( done ) {
1719+ var count = 0
1720+ var store = new session . MemoryStore ( )
1721+ var server = createServer ( { store : store } , function ( req , res ) {
1722+ req . session . hit = true
1723+ req . session . reload ( function ( ) {
1724+ req . session . save ( function ( err ) {
1725+ if ( err ) return res . end ( err . message )
1726+ res . end ( 'saved' )
1727+ } )
1728+ } )
1729+ } )
1730+
1731+ var _set = store . set
1732+ store . set = function set ( sid , sess , callback ) {
1733+ count ++
1734+ _set . call ( store , sid , sess , callback )
1735+ }
1736+
1737+ request ( server )
1738+ . get ( '/' )
1739+ . expect ( 200 , 'saved' , function ( err , res ) {
1740+ if ( err ) return done ( err )
1741+ assert . equal ( count , 1 )
1742+ count = 0
1743+ request ( server )
1744+ . get ( '/' )
1745+ . set ( 'Cookie' , cookie ( res ) )
1746+ . expect ( 200 , 'saved' , function ( err ) {
1747+ if ( err ) return done ( err )
1748+ assert . equal ( count , 1 )
1749+ done ( )
1750+ } )
1751+ } )
1752+ } )
17171753 } )
17181754
17191755 describe ( '.touch()' , function ( ) {
You can’t perform that action at this time.
0 commit comments