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
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');
|