Как я устанавливаю cookie с (рубиновым) компонентом промежуточного программного обеспечения стойки?

Я пишу компонент промежуточного программного обеспечения стойки для приложения для направляющих, которое должно будет условно установить cookie. Я в настоящее время пытаюсь выяснить для установки cookie. От поиска с помощью Google вокруг этого кажется, что это должно работать:

class RackApp
  def initialize(app)
    @app = app
  end

  def call(env)
    @status, @headers, @response = @app.call(env)
    @response.set_cookie("foo", {:value => "bar", :path => "/", :expires => Time.now+24*60*60})
    [@status, @headers, @response]
  end
end

который не дает ошибки, но не устанавливает cookie также. Что я делаю неправильно?

10
задан phaedryx 20 July 2010 в 23:04
поделиться

1 ответ

Если вы хотите использовать класс Response, вам нужно инстанцировать его из результатов вызова промежуточного уровня дальше по стеку. Кроме того, вам не нужны переменные экземпляра для такого промежуточного ПО и, вероятно, вы не захотите использовать их таким образом (@status и т.д. останутся в экземпляре промежуточного ПО после обработки запроса)

class RackApp
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, body = @app.call(env)
    # confusingly, response takes its args in a different order
    # than rack requires them to be passed on
    # I know it's because most likely you'll modify the body, 
    # and the defaults are fine for the others. But, it still bothers me.

    response = Rack::Response.new body, status, headers

    response.set_cookie("foo", {:value => "bar", :path => "/", :expires => Time.now+24*60*60})
    response.finish # finish writes out the response in the expected format.
  end
end

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

23
ответ дан 3 December 2019 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: