Доступ к имени cookie "сеансового ключа" из любого места в Rails

Мы создаем плагин для Rails, который будет использоваться в приложениях iframe Facebook, и в какой-то момент нам нужно проверить, был ли установлен файл cookie идентификатора рейса, или нет.

По умолчанию этот файл cookie называется _myprojectname_session, нам нужно узнать фактическое имя самого файла cookie. Поэтому, если он не установлен, мы можем сделать некоторые переадресации, чтобы убедиться, что файлы cookie установлены.

Как нам получить доступ к проклятому имени файла cookie из любого места? Или, по крайней мере, изнутри контроллера?

Ответы

Ответ 1

Я нашел решение. В Rails 2.3.2 по крайней мере ключ сеанса, установленный в config/initializers/session_store.rb, как это:

ActionController::Base.session = {
  :key         => '_myapp_session',
  :secret      => '[...]'
}

И вы можете прочитать значение, подобное этому:

ActionController::Base.session_options[:key]

От Base.session до Base.session_options автоматически, не имеет большого смысла, и это вызвало у меня большую головную боль... lol

Ответ 2

Rails.application.config.session_options[:key]

Ответ 3

Чтобы получить доступ к имени файла cookie сеанса из представления или контроллера, вы можете сказать:

request.session_options[:session_key]

а затем для доступа к необработанному значению этого файла cookie, являющегося пустым массивом, если он не установлен, вы используете:

request.cookies[ request.session_options[:session_key] ]

Имя файла cookie (aka session_key) устанавливается в файле config/environment.rb.

  config.action_controller.session = {     
    :session_key => '_project_session',
    :secret      => 'long-secret-key'
  }

Ответ 4

По моему опыту, если в ключе есть символ подчеркивания, IE SOMETIMES не устанавливает файлы cookie. Другими словами, используйте "projectession" вместо "_project_session".

Ответ 5

Я думаю, что ключ сеанса хранится в переменной ENV_SESSION_KEY

Ответ 7

В Rails 3/4 я использую это:

request.env["rack.request.cookie_hash"]

Это хэш, содержащий все файлы cookie для текущего пользователя, в том числе и для сеанса. Хэш имеет в качестве ключа имя файла cookie, а в качестве значения значение cookie

Ответ 8

Я не мог понять, как это сделать в рельсах 3: - (

В конце концов я положил это в config/initializers/session_store.rb

SESSION_KEY = '_myapp_session'
MyApp::Application.config.session_store :cookie_store, :key => SESSION_KEY

а затем доступ к нему, если это необходимо, например, в представлении...

<%= ::ENV_SESSION_KEY %>