【发布时间】:2012-11-11 03:08:41
【问题描述】:
在我的 Sinatra 应用中,我正在使用机架会话
use Rack::Session::Cookie, :secret => ENV['SECRET']
它似乎为每次页面加载设置了一个 cookie,即使我没有在会话中设置任何内容。如果设置了会话,有没有办法将其更改为仅设置 cookie?
【问题讨论】:
标签: ruby session cookies sinatra rack
在我的 Sinatra 应用中,我正在使用机架会话
use Rack::Session::Cookie, :secret => ENV['SECRET']
它似乎为每次页面加载设置了一个 cookie,即使我没有在会话中设置任何内容。如果设置了会话,有没有办法将其更改为仅设置 cookie?
【问题讨论】:
标签: ruby session cookies sinatra rack
Rack::Session::Cookie 将会话保存到编组的 Ruby Hash。
基本上,它正在编组您的会话并将其保存到 cookie 中。
它不在乎你的会话是空的Hash,
无论如何,它都会被编组并保存到 cookie 中。
您真的需要将会话保存在 cookie 中吗?
也许use Rack::Session::Pool 将您的会话保存在内存池中?
然后它只会设置一次cookie。
【讨论】:
:skip或@987654326 @(而不是:renew)会话选项是true。因此,即使您不更改会话数据而只是读取它,Rack 仍然会在每次请求时将 cookie 中相同的旧会话 id 发送回客户端。设置此会话 ID 的 HTTP 标头通常约为 100-150 字节,因此与可能为几千字节的封送对象相比,它的开销最小。