Доступ к имени файла cookie "сеансового ключа" из любой точки Rails - PullRequest
14 голосов
/ 16 июня 2009

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

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

Как мы можем получить доступ к проклятому названию куки из любого места? Или хотя бы из контроллера?

Ответы [ 8 ]

34 голосов
/ 10 февраля 2012
Rails.application.config.session_options[:key]
12 голосов
/ 17 июня 2009

Я нашел решение. В 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 автоматически, не имеет особого смысла, и это вызвало у меня большую головную боль ... смеется

2 голосов
/ 16 июня 2009

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

request.session_options[:session_key]

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

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

Имя файла cookie (он же session_key) задается в вашем файле config/environment.rb.

  config.action_controller.session = {     
    :session_key => '_project_session',
    :secret      => 'long-secret-key'
  }
1 голос
/ 19 марта 2011

По моему опыту, если в ключе есть подчеркивание, IE SOMETIMES не устанавливает куки. Другими словами, используйте «projectsession» вместо «_project_session».

0 голосов
/ 14 апреля 2014

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

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

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

0 голосов
/ 09 июня 2011

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

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

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

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

<%= ::ENV_SESSION_KEY %>
0 голосов
/ 09 октября 2009

Обратите внимание также на эту ошибку, которая влияет на тесты вокруг session_options в некоторых версиях Rails 2.x: https://rails.lighthouseapp.com/projects/8994/tickets/2303-testrequest-doesnt-initialize-session_options

0 голосов
/ 16 июня 2009

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

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