Как получить доступ к текущей реализации Rack :: Session - PullRequest
4 голосов
/ 08 августа 2011

Я работаю над гемом, который нужно будет читать и писать не только в текущем сеансе, но и в других «связанных» сеансах. Прямо сейчас я жестко кодирую операции чтения и записи в основное хранилище сеансов, которое мы используем в наших рельсах и стойках, всякий раз, когда мне нужно обновить сеанс, отличный от текущего. Но, чтобы сделать решение переносимым на другие реализации сеансов, потребуется более общий подход.

В приложениях Rails я могу посмотреть на Rails.application.config.session_store, чтобы определить реализацию хранилища сеансов и создать новый экземпляр для чтения и записи в сеансах после текущего сеанса. Создание другого экземпляра хранилища сеансов кажется немного неэффективным, но, похоже, оно работает.

Однако я не могу найти способ запросить текущее хранилище сеансов через приложение Rack. env['rack.session'] и env['rack.session.options'] не дают никакой информации.

Лучшим решением было бы получить доступ к уже созданному приложению Rack :: Session Rack в стеке промежуточного программного обеспечения. Я не уверен, как запросить, какое промежуточное программное обеспечение работает, а какое является текущей реализацией Rack :: Session (просто проверьте, какая из них является потомком Rack::Session::Abstract::ID?).

Будем весьма благодарны за любые советы по обращению с промежуточным программным обеспечением или альтернативные предложения.

1 Ответ

1 голос
/ 29 декабря 2011

Вы можете получить доступ к сессии в стойке, используя request.cookies["rack.session"].Rack <1.0 раньше позволял вам фактически передавать переменные сеанса через запрос <a href="http://snippets.aktagon.com/snippets/332-Testing-sessions-with-Sinatra-and-Rack-Test" rel="nofollow">, но он был отключен в более новых версиях стойки в целях безопасности .Я знаю, что уже поздно, но надеюсь, это поможет вам.

...