Как я могу найти новый session_id после команды reset_session в Rails 3?

Я использую команду «reset_session», как описано здесь, чтобы избежать фиксации сеанса.

После запуска команды я хотел бы сохранить новый сгенерированный идентификатор session_id в базе данных, но session[:session_id] не определен.

Я написал простой тест:

class ApplicationController < ActionController::Base
  protect_from_forgery
  after_filter :after_test
  def after_test
    RAILS_DEFAULT_LOGGER.debug "Old Session: #{session.inspect}"
    reset_session
    session[:random_number] = ((rand*1000).to_i)
    RAILS_DEFAULT_LOGGER.debug "New Session: #{session.inspect}"
  end
end

Результат в журнале загрузки двух последовательных страниц:

Started GET "/" for 127.0.0.1 at 2011-04-16 11:42:57 +0200
Processing by WelcomeController#index as HTML
Rendered welcome/index.html.erb within layouts/application (1.9ms)
Old Session: {"random_number"=>519, "session_id"=>"d17df62e286f20bd25e2714ee4f58020", "_csrf_token"=>"NkD5ZjG/RYLolfRy0ADmr+h+Sp2TXEOQlc6HhNpyp/g="}
New Session: {:random_number=>172}
Completed 200 OK in 7ms (Views: 6.4ms | ActiveRecord: 0.0ms)

и

Started GET "/" for 127.0.0.1 at 2011-04-16 11:42:58 +0200
Processing by WelcomeController#index as HTML
Rendered welcome/index.html.erb within layouts/application (2.0ms)
Old Session: {"random_number"=>172, "session_id"=>"54f46f520c80044a9f5475af78a05502", "_csrf_token"=>"9skbBEN35jQYRgH9oQVz1D5Hsi/o9l7fm7Qx9XDNETc="}
New Session: {:random_number=>497}
Completed 200 OK in 7ms (Views: 6.4ms | ActiveRecord: 0.0ms)

Как вы можете видеть, случайное число (172) правильно передается на вторую страницу, но новая сессия не показывает новый идентификатор сессии.

Я думаю, что новый идентификатор сеанса ("54f46f520c80044a9f5475af78a05502") создается после "after_filter", но я не знаю, как его получить.


person Lucamug    schedule 16.04.2011    source источник


Ответы (1)


Да, у рельсов есть эта проблема. Билет есть - https://rails.lighthouseapp.com/projects/8994/tickets/2200-session-support-broken

И, как видите, она еще не решена.

person Vasiliy Ermolovich    schedule 16.04.2011
comment
Это похоже на старую галочку, связанную со старой версией Rails, и она также помечена как risolved. Rails теперь хорошо справляется с сеансом. Этот вопрос кажется не связанным с вопросом. - person Lucamug; 16.04.2011
comment
Нет, это тоже связано с новой версией Rails. session_id не создается после reset_session, только после нового запроса. И это не было решено. - person Vasiliy Ermolovich; 16.04.2011
comment
Извините, я прочитал лучше, и вы правы. Я удивлен, что эта проблема все еще существует. session_id на самом деле создается во время запроса reset_session, а не только после выполнения команды reset_session... - person Lucamug; 17.04.2011