module ActionDispatch::Session::StaleSessionCheck

def extract_session_id(env)

def extract_session_id(env)
  stale_session_check! { super }
end

def load_session(env)

def load_session(env)
  stale_session_check! { super }
end

def stale_session_check!

def stale_session_check!
  yield
rescue ArgumentError => argument_error
  if argument_error.message =~ %r{undefined class/module ([\w:]*\w)}
    begin
      # Note that the regexp does not allow $1 to end with a ':'
      $1.constantize
    rescue LoadError, NameError => const_error
      raise ActionDispatch::Session::SessionRestoreError,
        "Session contains objects whose class definition isn't available.\n" +
        "Remember to require the classes for all objects kept in the session.\n" +
        "(Original exception: #{const_error.message} [#{const_error.class}])\n"
    end
    retry
  else
    raise
  end
end