междоменная проблема сессий в рельсах - PullRequest
0 голосов
/ 20 ноября 2010

У меня есть сервис, который позволяет встраивать опрос в страницу. Этот опрос делает междоменные вызовы ajax на мой сервер со страниц, размещенных где угодно.

Служба работает на рельсах 3. Я пытаюсь сохранить индекс последнего вопроса, на который был дан ответ в сеансе. Магазин ActiveRecord активен. Сервис размещен на героку. Я перенес сессионный стол и сгреб его.

Но значения не сохраняются в сеансе. Это проблема, которую я не могу обойти, или возможно, чтобы сессии работали таким образом?

Вот иллюстрация проблемы:

 Rails.logger.info { "session current stage is #{session[:current_stage]}" }    
 session[:current_stage] = params[:current_stage].to_i
 session[:current_stage] ||= 0
 Rails.logger.info { "session current stage is #{session[:current_stage]}" }

вывод выглядит так:

session current stage is 0
session current stage is 1

При следующем запуске (после значения сеанса 1):

session current stage is 0
session current stage is 2

Или просто мои сеансы не работают должным образом, независимо от междоменных проблем?

Просто быстрое добавление: создается впечатление, что уникальный сеанс создается при каждом ударе по серверу, а не восстанавливается в следующий раз. Он рассматривает каждый вызов как новое, беспрецедентное событие. Я полагаю, что это побочный продукт кросс-доменной работы. Любые решения?

1 Ответ

0 голосов
/ 28 ноября 2010

Извините за задержку с ответом - куки были уничтожены и потеряли отслеживание этого вопроса.

Я использую междоменные вызовы через jQuery ajax, и соединения работают отлично. Я вызываю процедуру инициализации при загрузке страницы, которая вызывает удаленный сервер и получает объект JSON, который он использует для сборки вопросника, который запускается в браузере, и отправляет результаты обратно на сервер. Он содержит ряд кодов, встроенных в JSON, что устраняет необходимость в сессиях. Но когда пользователь меняет страницы, мне нужно, чтобы сервер знал, что когда следующая страница получает вызов init, это соединение, которое он уже видел.

Я использую сеансы ActiveRecord. Я вижу, как они накапливаются в таблице сеансов, и кажется, что каждое новое соединение создает новый сеанс. Эти соединения почти все через соединения ajax.

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

...