diff --git a/HISTORY.md b/HISTORY.md index 727834eb..ffb63d71 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,5 @@ -unreleased -========== +1.13.1 / 2016-01-29 +=================== * deps: parseurl@~1.3.1 - perf: enable strict mode diff --git a/index.js b/index.js index 0de7c62f..f6e9553d 100644 --- a/index.js +++ b/index.js @@ -203,6 +203,10 @@ function session(options){ return; } + if (cookie.originalMaxAge > 0) { + cookie.expires = new Date(Date.now() + cookie.originalMaxAge); + } + setcookie(res, name, req.sessionID, secrets[0], cookie.data); }); diff --git a/package.json b/package.json index 8b945f2e..b9e15281 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "express-session", - "version": "1.13.0", + "version": "1.13.1", "description": "Simple session middleware for Express", "author": "TJ Holowaychuk (http://tjholowaychuk.com)", "contributors": [ diff --git a/test/session.js b/test/session.js index 682cb8d0..4a1b9c32 100644 --- a/test/session.js +++ b/test/session.js @@ -2115,6 +2115,54 @@ describe('session()', function(){ }) }) }) + + describe('cookie.expire', function(){ + this.timeout(12000); + var val; + + var app = express() + .use(session({ secret: 'keyboard cat', cookie: { maxAge: 10000 }})) + .use(function(req, res, next){ + req.session.count = req.session.count || 0; + req.session.count++; + res.write(req.session.count.toString()); //this is very important. If use res.end(...) then no bug + res.end(''); + }); + + it('should be Now + .maxAge (first test)', function(done){ + request(app) + .get('/') + .expect(200, '1', function (err, res) { + var a = new Date(expires(res)) + var b = new Date + var delta = a.valueOf() - b.valueOf() + + val = cookie(res).split(';')[0]; + + assert.ok(delta > 9000 && delta <= 10000, "cookie.expire is too short as expected"); + done(); + }); + }); + + it('should be Now + .maxAge (second test)', function(done){ + setTimeout(function() { + request(app) + .get('/') + .set('Cookie', val) + .expect(200, '2', function (err, res) { + var a = new Date(expires(res)) + var b = new Date + var delta = a.valueOf() - b.valueOf() + + var thisCookie = cookie(res).split(';')[0]; + assert.equal(thisCookie, val, "cookie value itself should be same"); + + assert.ok(delta > 9000 && delta <= 10000, "cookie.expire is too short as expected"); + done(); + }); + }, 6000); + }); + }); }) function cookie(res) {