Simple cookie-based session middleware for Koa.
$ npm install koa-session
View counter example:
var session = require('koa-session');
var koa = require('koa');
var app = koa();
app.keys = ['some secret hurr'];
app.use(session(app));
app.use(function *(){
// ignore favicon
if (this.path === '/favicon.ico') return;
var n = this.session.views || 0;
this.session.views = ++n;
this.body = n + ' views';
})
app.listen(3000);
console.log('listening on port 3000');
For Koa 2, use koa-convert to convert the session middleware :
const koa = require('koa');
const session = require('koa-session')
const convert = require('koa-convert');
const app = new koa();
app.use(convert(session(app)));
// codes
This module provides "guest" sessions, meaning any visitor will have a session, authenticated or not. If a session is new a Set-Cookie will be produced regardless of populating the session.
The cookie name is controlled by the key
option, which defaults
to "koa:sess". All other options are passed to ctx.cookies.get()
and
ctx.cookies.set()
allowing you to control security, domain, path,
and signing among other settings.
Use options.encode
and options.decode
to customize your own encode/decode methods.
valid()
: valid session value before use itbeforeSave()
: hook before save session
Returns true if the session is new.
Get cookie's maxAge.
Set cookie's maxAge.
To destroy a session simply set it to null
:
this.session = null;
This module only supports cookie sessions. There are many other modules listed in koa's wiki for sessions that use database storage. Unlike Connect 2.x's session middleware, there is no main "session" middleware that you plugin different stores - each store is a completely different module.
If you're interested in creating your own koa session store, feel free to fork/extend this repository and add additional tests. At a minimum, it should pass this repositories' tests that apply. Ideally, there would be a central repository with specifications and tests for all koa sessions, which would allow interoperability and consistency between session modules. If you're interested in working on such a project, let us know!
MIT