tl; dr: Используйте код @ Nader . НО я обнаружил, что мне нужно добавить его в мой conifg/environments/[production|development].rb
и передать мой домен с префиксом в качестве аргумента. Это на Rails 3.2.11
Сеансы cookie обычно хранятся только для вашего домена верхнего уровня.
Если вы посмотрите на Chrome -> Settings -> Show advanced settings… -> Privacy/Content settings… -> All cookies and site data… -> Search {yourdomain.com}
Вы увидите, что для sub1.yourdomain.com
и othersub.yourdomain.com
и yourdomain.com
будут отдельные записи
Задача состоит в том, чтобы использовать один и тот же файл хранилища сеансов во всех поддоменах.
Шаг 1: Используйте @ Nader CustomDomainCookie
код
Здесь Rack Middleware входит. Некоторые более подходящие ресурсы стойки и рельсов:
По сути, это означает, что он отобразит все данные сеанса cookie обратно в тот же файл cookie, который равен вашему корневому домену.
Шаг 2: Добавить в Rails Config
Теперь, когда у вас есть собственный класс в lib, убедитесь, что он загружается автоматически. Если это ничего не значит для вас, посмотрите здесь: Rails 3 autoload
Прежде всего, убедитесь, что вы используете систему cookie-файлов для всей системы. В config/application.rb
мы говорим Rails использовать хранилище cookie.
# We use a cookie_store for session data
config.session_store :cookie_store,
:key => '_yourappsession',
:domain => :all
Причина, по которой это здесь упоминается, заключается в строке :domain => :all
. Есть другие люди, которые предложили указать :domain => ".yourdomain.com"
вместо :domain => :all
. По какой-то причине это не сработало, и мне потребовался специальный класс Middleware, как описано выше.
Тогда в вашем config/environments/production.rb
добавьте:
config.middleware.use "CustomDomainCookie", ".yourdomain.com"
Обратите внимание, что предшествующая точка необходима. См. " cookie субдомена, отправленные в запросе родительского домена? ", чтобы узнать почему.
Тогда в вашем config/environments/development.rb
добавьте:
config.middleware.use "CustomDomainCookie", ".lvh.me"
Трюк lvh.me отображается на localhost. Это круто См. этот Railscast о поддоменах и в этой заметке для получения дополнительной информации.
Надеюсь, это должно сделать это. Я, честно говоря, не совсем уверен, почему этот процесс настолько запутанный, так как я считаю, что сайты с поддоменами являются общими. Если у кого-либо есть какие-либо дополнительные сведения о причинах каждого из этих шагов, просим сообщить нас в комментариях.