ruby-on-rails 在Rails中,如何设置cookie的最大年龄?

cgh8pdjw  于 2023-05-30  发布在  Ruby
关注(0)|答案(2)|浏览(158)

在Rails 3.2.8中,你可以像这样write a cookie

cookies[:login] = {
  :value   => "XJ-122",
  :expires => 1.hour.from_now
}

文档说这些是可用的选项符号:

:value
:path
:domain
:expires
:secure
:httponly

我希望:max_age也可以作为一个选项,但也许用户代理支持还不够广泛(?))以保证包括它。
那么我应该如何在Rails中设置cookie的Max-Age呢?

zfycwa2u

zfycwa2u1#

我读了the Rails source code for ActionDispatch::Cookies。如果你看一下handle_options方法是如何使用的,你会发现即使文档中没有指定的选项也会被传递。Rails通常非常自由地传递选项,其哲学是,在某个地方,方法将知道如何处理剩余的选项。
因此,我建议您尝试使用:max_age选项,即使它没有文档记录,看看会发生什么。
注意:Rails依赖于Rack来设置cookie头,所以如果由于某种原因,“Max-Age”“Set-Cookie”头被传递给Rack,但没有**被传递,我会在Github Rack问题跟踪器上询问。
更新#1:至少有一个pull请求与Max-Age和Rack有关,但我不确定它是否相关。如果以上不起作用,我想你可能想讨论一下我上面提到的Rack ticket tracker。
更新#2:你看过Rack::Cache中间件吗?也许有用。

hs1rzwqc

hs1rzwqc2#

TL;DR -仅总结上述所有内容

cookies["foo"] = {value: "bar", max_age: 2.minutes}

Rails没有意识到:max_age,并且该选项没有文档记录。但是,Rails会将无法识别的选项传递给底层的Rack中间件。Rack支持:max_age(下划线)并正确呈现Set-Cookie标头。

相关问题