You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
5.7 KiB

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('<p>views: ' + sess.views + '</p>');
res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>');
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('<p>views: ' + sess.views + '</p>');
res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>');
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('<p>views: ' + sess.views + '</p>');
} 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('<p>views: ' + sess.views + '</p>');
res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>');
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('<p>views: ' + sess.views + '</p>');
res.end();
sess.views++;
} 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('<p>Hey ' + sess.name + '!</p>');
else res.write('<p>Enter a username:</p>');
res.end('<form action="/" method="post">'
+ '<input type="type" name="name" />'
+ '<input type="submit" value="Save" />'
+ '</form>');
})).listen(3005);
console.log('port 3005: browser-session length sessions persistence example');