var connect = require('../') , http = require('http'); var year = 31557600000; // large max-age, delegate expiry to the session store. // for example with connect-redis's .ttl option. http.createServer(connect() .use(connect.cookieParser()) .use(connect.session({ secret: 'keyboard cat', cookie: { maxAge: year }})) .use(connect.favicon()) .use(function(req, res, next){ var sess = req.session; if (sess.views) { sess.views++; res.setHeader('Content-Type', 'text/html'); res.write('
views: ' + sess.views + '
'); res.write('expires in: ' + (sess.cookie.maxAge / 1000) + 's
'); res.end(); } else { sess.views = 1; res.end('welcome to the session demo. refresh!'); } })).listen(3007); console.log('port 3007: 1 minute expiration demo'); // expire sessions within a minute // /favicon.ico is ignored, and will not // receive req.session http.createServer(connect() .use(connect.cookieParser()) .use(connect.session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) .use(connect.favicon()) .use(function(req, res, next){ var sess = req.session; if (sess.views) { sess.views++; res.setHeader('Content-Type', 'text/html'); res.write('views: ' + sess.views + '
'); res.write('expires in: ' + (sess.cookie.maxAge / 1000) + 's
'); res.end(); } else { sess.views = 1; res.end('welcome to the session demo. refresh!'); } })).listen(3006); console.log('port 3006: 1 minute expiration demo'); // $ npm install connect-redis try { var RedisStore = require('connect-redis')(connect); http.createServer(connect() .use(connect.cookieParser()) .use(connect.session({ secret: 'keyboard cat', cookie: { maxAge: 60000 * 3 } , store: new RedisStore })) .use(connect.favicon()) .use(function(req, res, next){ var sess = req.session; if (sess.views) { sess.views++; res.setHeader('Content-Type', 'text/html'); res.end('views: ' + sess.views + '
'); } else { sess.views = 1; res.end('welcome to the redis demo. refresh!'); } })).listen(3001); console.log('port 3001: redis example'); } catch (err) { console.log('\033[33m'); console.log('failed to start the Redis example.'); console.log('to try it install redis, start redis'); console.log('install connect-redis, and run this'); console.log('script again.'); console.log(' $ redis-server'); console.log(' $ npm install connect-redis'); console.log('\033[0m'); } // conditional session support by simply // wrapping middleware with middleware. var sess = connect.session({ secret: 'keyboard cat', cookie: { maxAge: 5000 }}); http.createServer(connect() .use(connect.cookieParser()) .use(function(req, res, next){ if ('/foo' == req.url || '/bar' == req.url) { sess(req, res, next); } else { next(); } }) .use(connect.favicon()) .use(function(req, res, next){ res.end('has session: ' + (req.session ? 'yes' : 'no')); })).listen(3002); console.log('port 3002: conditional sessions'); // Session#reload() will update req.session // without altering .maxAge // view the page several times, and see that the // setInterval can still gain access to new // session data http.createServer(connect() .use(connect.cookieParser()) .use(connect.session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) .use(connect.favicon()) .use(function(req, res, next){ var sess = req.session , prev; if (sess.views) { res.setHeader('Content-Type', 'text/html'); res.write('views: ' + sess.views + '
'); res.write('expires in: ' + (sess.cookie.maxAge / 1000) + 's
'); sess.views++; res.end(); } else { sess.views = 1; setInterval(function(){ sess.reload(function(){ console.log(); if (prev) console.log('previous views %d, now %d', prev, req.session.views); console.log('time remaining until expiry: %ds', (req.session.cookie.maxAge / 1000)); prev = req.session.views; }); }, 3000); res.end('welcome to the session demo. refresh!'); } })).listen(3003); console.log('port 3003: Session#reload() demo'); // by default sessions // last the duration of // a user-agent's own session, // aka while the browser is open. http.createServer(connect() .use(connect.cookieParser()) .use(connect.session({ secret: 'keyboard cat' })) .use(connect.favicon()) .use(function(req, res, next){ var sess = req.session; if (sess.views) { res.setHeader('Content-Type', 'text/html'); res.write('views: ' + sess.views + '
'); sess.views++; res.end(); } else { sess.views = 1; res.end('welcome to the browser session demo. refresh!'); } })).listen(3004); console.log('port 3004: browser-session length sessions'); // persistence example, enter your name! http.createServer(connect() .use(connect.bodyParser()) .use(connect.cookieParser()) .use(connect.session({ secret: 'keyboard cat' })) .use(connect.favicon()) .use(function(req, res, next){ if ('POST' != req.method) return next(); req.session.name = req.body.name; res.statusCode = 302; res.setHeader('Location', '/'); res.end(); }) .use(function(req, res, next){ var sess = req.session; res.setHeader('Content-Type', 'text/html'); if (sess.name) res.write('Hey ' + sess.name + '!
'); else res.write('Enter a username:
'); res.end(''); })).listen(3005); console.log('port 3005: browser-session length sessions persistence example');