Skip to content

Commit 99d6cde

Browse files
jneanderdougwilson
authored andcommitted
Fix resaving already-saved new session at end of request
closes #849
1 parent a06b0be commit 99d6cde

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

HISTORY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
unreleased
22
==========
33

4+
* Fix resaving already-saved new session at end of request
45
56

67
1.17.2 / 2021-05-19

index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ function session(options) {
444444
return false;
445445
}
446446

447-
return !saveUninitializedSession && cookieId !== req.sessionID
447+
return !saveUninitializedSession && !savedHash && cookieId !== req.sessionID
448448
? isModified(req.session)
449449
: !isSaved(req.session)
450450
}

test/session.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,6 +1775,31 @@ describe('session()', function(){
17751775
.expect(200, 'saved', done)
17761776
})
17771777
})
1778+
1779+
describe('when saveUninitialized is false', function () {
1780+
it('should prevent end-of-request save', function (done) {
1781+
var store = new session.MemoryStore()
1782+
var server = createServer({ saveUninitialized: false, store: store }, function (req, res) {
1783+
req.session.hit = true
1784+
req.session.save(function (err) {
1785+
if (err) return res.end(err.message)
1786+
res.end('saved')
1787+
})
1788+
})
1789+
1790+
request(server)
1791+
.get('/')
1792+
.expect(shouldSetSessionInStore(store))
1793+
.expect(200, 'saved', function (err, res) {
1794+
if (err) return done(err)
1795+
request(server)
1796+
.get('/')
1797+
.set('Cookie', cookie(res))
1798+
.expect(shouldSetSessionInStore(store))
1799+
.expect(200, 'saved', done)
1800+
})
1801+
})
1802+
})
17781803
})
17791804

17801805
describe('.touch()', function () {

0 commit comments

Comments
 (0)