在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
呢?
2条答案
按热度按时间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中间件吗?也许有用。
hs1rzwqc2#
TL;DR -仅总结上述所有内容
Rails没有意识到:max_age,并且该选项没有文档记录。但是,Rails会将无法识别的选项传递给底层的Rack中间件。Rack支持:max_age(下划线)并正确呈现Set-Cookie标头。