#ruby-on-rails #ruby #session
#ruby-on-rails #ruby #сессия
Вопрос:
У меня есть веб-сайт, который www.abrisud.com. На этом веб-сайте есть 7 доменных имен (по одному для каждого языка): abrisud.com, abrisud.it, abrisud.de и т.д. … и abrisud-enclosure.co.uk.
Проблема в последнем: я теряю сеанс при каждом отдельном запросе. Каждый раз, когда я загружаю страницу, у меня другой идентификатор сеанса. На других доменах все работает просто отлично.
Веб-сайт работает под управлением ruby 1.8.7 и rails 3.0.0.
Я действительно убежден, что проблема возникает из-за «-» в доменном имени, но я просто не могу найти ничего (или почти ничего) по этому вопросу через Интернет.
Надеюсь, я выражаюсь достаточно ясно, если нет, просто скажите мне.
Комментарии:
1. Может ли быть опечатка с подчеркиванием вместо этого?
abrisud_enclosure.co.uk
действительно приведет к удалению файлов cookie, поскольку это недопустимое доменное имя; тире (-
) обычно должно работать нормально.2. Кажется, у меня были проблемы с некоторыми версиями IE и доменными именами с пунктиром. Вы пробовали несколько браузеров?
3. @Piskvor : Это не опечатка, доменное имя abrisud-enclosure.co.uk Я знаю, что проблема известна с подчеркиванием, но я получил ее с помощью тире … 🙁
4. @jeremy : Я уже пробовал в chrome 12 и firefox 4, и проблема одинакова в обоих.
5. @Olivier de Robert: Спасибо за разъяснение, это действительно странно. (о, и действительно ли это тире ASCII (шестнадцатеричное
0x2D
)? (домен разрешается, так что, вероятно, да; возможно ли вообще зарегистрировать домен с помощью em-dash?))
Ответ №1:
Вот ответ :
Из модуля ActionDispatch::Http::URL (Rails 3.0.x), обязательно прочитайте комментарии 😉
# Returns the domain part of a host, such as "rubyonrails.org" in "www.rubyonrails.org".
# You can specify a different <tt>tld_length</tt>, such as 2 to catch rubyonrails.co.uk in "www.rubyonrails.co.uk".
def domain(tld_length = 1)
return nil unless named_host?(host)
host.split('.').last(1 tld_length).join('.')
end
Ответ №2:
Что ж, вызов метода domain с соответствующим аргументом _tld_lenght_ не сработал, запрос.domain (abrisud-enclosure.co.uk ) было хорошо, но не session_domain (все еще co.uk ).
Итак, мне пришлось добавить следующие строки в качестве фильтра before в мой application_controller :
def set_session_domain
request.session_options[:domain] = request.domain
end
Если у вас есть решение получше, я открыт для него, поскольку я думаю, что это действительно грязное исправление.
Спасибо
Ответ №3:
Я достиг максимума на вашем сайте, файл cookie установлен с помощью: domain=co.uk;путь=/
Итак, проблема в вашем стеке rails, а не в браузерах — время выполнить некоторую отладку 🙂
Комментарии:
1. Спасибо за ваш ответ, я изучаю это прямо сейчас и сообщаю вам как можно скорее. Пока я не нашел набор файлов cookie с domain=co.uk.