X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/6d59a122ead9e2cc7d340ba6ec13cfdc250e1e5e..57ba7d6f0b160a2dc883d84a6864464d5de6083a:/config/initializers/session_store.rb?ds=sidebyside diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index ffba99257..72f2da7c5 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -1,8 +1,35 @@ # Be sure to restart your server when you modify this file. -OpenStreetMap::Application.config.session_store :cookie_store, :key => '_osm_session' +if defined?(MEMCACHE_SERVERS) + unless STATUS == :database_offline or STATUS == :database_readonly + module Rack + module Session + class Memcache + def get_session(env, sid) + with_lock(env, [nil, {}]) do + unless sid and session = @pool.get(sid) + if sid and s = ActiveRecord::SessionStore::SqlBypass.find_by_session_id(sid) + session = s.data + s.destroy + else + sid, session = generate_sid, {} + end + + unless /^STORED/ =~ @pool.add(sid, session) + raise "Session collision on '#{sid.inspect}'" + end + end + [sid, session] + end + end + end + end + end + end -# Use the database for sessions instead of the cookie-based default, -# which shouldn't be used to store highly confidential information -# (create the session table with "rails generate session_migration") -# OpenStreetMap::Application.config.session_store :active_record_store + cache = MemCache.new(:namespace => "rails:session", :string_return_types => true) + + OpenStreetMap::Application.config.session_store :mem_cache_store, :cache => cache, :key => "_osm_session" +else + OpenStreetMap::Application.config.session_store :cookie_store, :key => '_osm_session' +end