Skip to content

Commit fe14c14

Browse files
committed
Add a unit test for regenerated session's not ending up with an expired cookie
1 parent 7603648 commit fe14c14

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

Diff for: test/session.js

+66
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,72 @@ describe('session()', function(){
13031303
});
13041304
});
13051305

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+
13061372
it('should not set cookie if initial session destroyed', function(done){
13071373
var store = new session.MemoryStore();
13081374
var app = express()

0 commit comments

Comments
 (0)