src/session.js

Constructor method Session

Session factory

Parameters:

  • id must be a String.
    (Session ID)

  • server must be an Object.
    (Server instance)

function Session ( id, server ) { this._id = id; this._server = server; this._timestamp = 0; }

Setting constructor loop

Session.prototype.constructor = Session;

Sessions

TODO: too slow!

TurtleIO.prototype.session = {

Method create

Creates a session

Parameters:

  • req must be an Object.
    (HTTP(S) request Object)

  • res must be an Object.
    (HTTP(S) response Object)

Returns an Object
(Session instance)

create : function ( req, res ) { var instance = this.server, expires = instance.session.expires, domain = req.parsed.host.isDomain() && !req.parsed.host.isIP() ? req.parsed.host : undefined, secure = ( req.parsed.protocol === "https:" ), id = $.uuid( true ), iv, sesh, sid; iv = req.connection.remoteAddress + "-" + instance.config.session.iv; sesh = this.server.sessions[id] = new Session( id, this.server ); sid = instance.cipher( id, true, iv ); instance.cookie.set( res, instance.config.session.id, sid, expires, domain, secure, "/" ); return sesh; },

Method destroy

Destroys a session

Parameters:

  • req must be an Object.
    (HTTP(S) request Object)

  • res must be an Object.
    (HTTP(S) response Object)

Returns an Object
(TurtleIO instance)

destroy : function ( req, res ) { var instance = this.server, domain = req.parsed.host.isDomain() && !req.parsed.host.isIP() ? req.parsed.host : undefined, secure = ( req.parsed.protocol === "https:" ), iv = req.connection.remoteAddress + "-" + instance.config.session.iv, sid = req.cookies[instance.config.session.id], id = instance.cipher( sid, false, iv ); if ( id ) { instance.cookie.expire( res, instance.config.session.id, domain, secure, "/" ); delete instance.sessions[id]; } return instance; },

Method get

Gets a session

Parameters:

  • req must be an Object.
    (HTTP(S) request Object)

  • res must be an Object.
    (HTTP(S) response Object)

Returns a Mixed
(Session or undefined)

get : function ( req, res ) { var instance = this.server, sid = req.cookies[instance.config.session.id], sesh = null, id, iv; if ( sid !== undefined ) { iv = req.connection.remoteAddress + "-" + instance.config.session.iv; id = instance.cipher( sid, false, iv ); sesh = instance.sessions[id] || null; if ( sesh !== null ) { if ( sesh._timestamp.diff( moment().utc().unix() ) > 1 ) { this.save( req, res ); } } else { this.destroy( req, res ); } } return sesh; },

Method save

Saves a session

Parameters:

  • req must be an Object.
    (HTTP(S) request Object)

  • res must be an Object.
    (HTTP(S) response Object)

Returns an Object
(TurtleIO instance)

save : function ( req, res ) { var instance = this.server, expires = instance.session.expires, domain = req.parsed.host.isDomain() && !req.parsed.host.isIP() ? req.parsed.host : undefined, secure = ( req.parsed.protocol === "https:" ), iv = req.connection.remoteAddress + "-" + instance.config.session.iv, sid = req.cookies[instance.config.session.id], id = instance.cipher( sid, false, iv ); if ( id ) { instance.sessions[id]._timestamp = moment().unix(); instance.cookie.set( res, instance.config.session.id, sid, expires, domain, secure, "/" ); } return instance; },

Transformed config.session.valid for $.cookie{}

expires : "",

Determines if a session has expired

maxDiff : 0,

Set & unset from start() & stop()

server : null };