class ActionDispatch::Session::MemCacheStore

def destroy(env)

def destroy(env)
  if sid = current_session_id(env)
    @pool.delete(sid)
  end
rescue MemCache::MemCacheError, Errno::ECONNREFUSED
  false
end

def get_session(env, sid)

def get_session(env, sid)
  sid ||= generate_sid
  begin
    session = @pool.get(sid) || {}
  rescue MemCache::MemCacheError, Errno::ECONNREFUSED
    session = {}
  end
  [sid, session]
end

def initialize(app, options = {})

def initialize(app, options = {})
  require 'memcache'
  # Support old :expires option
  options[:expire_after] ||= options[:expires]
  super
  @default_options = {
    :namespace => 'rack:session',
    :memcache_server => 'localhost:11211'
  }.merge(@default_options)
  @pool = options[:cache] || MemCache.new(@default_options[:memcache_server], @default_options)
  unless @pool.servers.any? { |s| s.alive? }
    raise "#{self} unable to find server during initialization."
  end
  @mutex = Mutex.new
  super
end

def set_session(env, sid, session_data)

def set_session(env, sid, session_data)
  options = env['rack.session.options']
  expiry  = options[:expire_after] || 0
  @pool.set(sid, session_data, expiry)
  sid
rescue MemCache::MemCacheError, Errno::ECONNREFUSED
  false
end