Я пытаюсь реализовать хранилище сеансов для приложения узла express.js
Мой вопрос:
- Как удалить cookie, которые имеют время жизни сеанса браузера (помечены как expires = false в соответствии с документом подключения)
- Должен ли я хранить данные сеанса в виде строки json или непосредственно как объект
это сценарий с кофе, который я придумал до сих пор, используя mongoose, как я, это форма, которую я выбрал для приложения
express = require 'express'
mongoose = require "mongoose"
util = require "util"
# define session schema
SessionSchema = new mongoose.Schema
sid : { type: String, required: true, unique: true }
data : { type: String, default: '{}' }
expires : { type: Date, index: true }
module.exports =
class SessionStore extends express.session.Store
constructor: (options) ->
console.log "creating new session store"
options ?= {}
# refresh interval
options.interval ?= 60000
options.url ?= "mongodb://localhost/session"
# create dedicated session connection
connection = mongoose.createConnection options.url
# create session model
@Session = connection.model 'Session', SessionSchema
# remove expired session every cycles
removeExpires = => @Session.remove expires: { '$lte': new Date() }
setInterval removeExpires, options.interval
get: (sid, fn) ->
@Session.findOne sid: sid, (err, session) ->
if session?
try
fn null, JSON.parse session.data
catch err
fn err
else
fn err, session
set: (sid, data, fn) ->
doc =
sid: sid
data: JSON.stringify data
expires: data.cookie.expires
try
@Session.update sid: sid, doc, upsert: true, fn
catch err
fn err
destroy: (sid, fn) ->
@Session.remove { sid: sid }, fn
all: (fn) ->
@Session.find { expires: { '$gte': new Date() } }, [ 'sid' ], (err, sessions) ->
if sessions?
fn null, (session.sid for session in sessions)
else
fn err
clear: (fn) -> @Session.drop fn
length: (fn) -> @Session.count {}, fn