Как создать свой собственный класс хранилища сеансов? - PullRequest
6 голосов
/ 02 августа 2011

По умолчанию сеансы хранятся в cookie-файлах браузера (: cookie_store), но вы также можете указать одно из других включенных хранилищ (: active_record_store,: mem_cache_store или свой собственный класс. Пожалуйста, дайте мнеспособ создания пользовательского класса

config.action_controller.session_store = :your_customer_class

Ответы [ 2 ]

6 голосов
/ 13 августа 2012

Маурисио Линьярес прав, однако я хотел добавить некоторые детали, потому что я не думаю, что очевидно, какие методы вам нужно реализовать.

Вы можете наследовать от ActionDispatch :: Session :: AbstractStore , но это наследует от Rack :: Session :: Abstract :: ID , который является хорошим местом дляищите методы, которые вам нужно реализовать.В частности, из Rack :: Session :: Abstract :: ID :

# All thread safety and session retrival proceedures should occur here.
# Should return [session_id, session].
# If nil is provided as the session id, generation of a new valid id
# should occur within.

def get_session(env, sid)
  raise '#get_session not implemented.'
end

# All thread safety and session storage proceedures should occur here.
# Should return true or false dependant on whether or not the session
# was saved or not.

def set_session(env, sid, session, options)
  raise '#set_session not implemented.'
end

# All thread safety and session destroy proceedures should occur here.
# Should return a new session id or nil if options[:drop]

def destroy_session(env, sid, options)
  raise '#destroy_session not implemented'
end

В качестве эксперимента я написал простое файловое хранилище сеансов .

0 голосов
/ 02 августа 2011

Чтобы реализовать собственное хранилище сеансов, самое простое решение - унаследовать от ActionDispatch :: Session :: AbstractStore и реализовать необходимые методы. CookieStore - довольно простая реализация, и, возможно, вам стоит начать.

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