0

Я реализую веб-приложение с использованием рельсов 4.2.0 и ruby ​​2.2.0 и сталкиваясь с проблемой, что задан любой запрос времени в новом сеансе. В этом случае я ничего не могу сэкономить на сеансе, так как он ушел. Также это приводит к тому, что токен аутентификации не может быть проверен.рельсы 4 сбрасывают сеанс по каждому запросу на производстве

Для проверки цели защита подделки отключена в ApplicationController, так что это не причина, почему сеанс сбрасывается.

class ApplicationController < ActionController::Base 
    #protect_from_forgery with: :null_session 
    skip_before_action :verify_authenticity_token ` 
end 

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

MyApp::Application.config.session_store :active_record_store, :key => '_myapp_session', domain: :all, tld_length: 2 

запрос Каждый раз, когда делается новая запись в sessions таблицу вставляется с новым sessions_id и куки сессии в браузер указывает на новый сеанс.

Любые идеи, что могло бы сбросить сеанс?

Это происходит только в Окружающая среда. В развитии все в порядке.

+0

ли вы когда-нибудь выяснить проблему? Сейчас у меня такая же проблема. Не имеет смысла:/ – Andy

+0

Ну, я не понял эту проблему, но проблема ушла как-то. Это было странно. Вы пытались удалить cookie сеанса и перезагрузить страницу? Попытайтесь посмотреть, что произойдет. – lunatic

ответ

0

Ваша проблема связана с призывом к skip_before_action :verify_authenticity_token; если токен аутентификации не проверен, Rails сбросит сеанс. Вы также хотите снова включить protect_from_forgery.

Я также видел AJAX запросы без маркеров подлинности, чтобы вызвать сеанс для сброса, снова более подробно здесь: http://www.kalzumeus.com/2011/11/17/i-saw-an-extremely-subtle-bug-today-and-i-just-have-to-tell-someone/

Ref: https://stackoverflow.com/a/11943243/449342

+0

Я удалил 'skip_before_action: verify_authenticity_token' и uncommented' protect_from_forgery', но проблема все еще сохраняется. – lunatic

+0

Проблема на первом месте заключалась в том, что во время запроса POST у меня были исключения ActionController :: InvalidAuthenticityToken. Что очевидно, проверка CSRF выполняется во время запросов POST. У меня есть скрытое поле 'authenticity_token' в моей форме, поэтому это не проблема. Я все еще думаю, что проблема в том, что сеанс сбрасывается после каждого запроса. – lunatic