узел, хранилище сеансов удалить просроченные сеансы - PullRequest
2 голосов
/ 22 сентября 2011

Я пытаюсь реализовать хранилище сеансов для приложения узла express.js Мой вопрос:

  1. Как удалить cookie, которые имеют время жизни сеанса браузера (помечены как expires = false в соответствии с документом подключения)
  2. Должен ли я хранить данные сеанса в виде строки 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

1 Ответ

1 голос
/ 24 сентября 2011

Я довольно новичок в ноде, так что возьмите его с крошкой соли.

Хотя он не ориентирован непосредственно на сессию, помните, что урок по dailyjs немного мне поможетВ частности, последний бит кода, где он проверяет токены входа в систему.

Кроме того, я считаю, что лучше проанализировать JSON и сохранить как объект.Таким образом, вам будет проще получить доступ к различным битам cookie, если вы заранее позаботитесь о разборе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...