每次请求都会更改Cookie,使用sinatra和Rack :: Session :: EncryptedCookie

时间:2013-06-27 19:58:59

标签: ruby cookies sinatra session-cookies rack

我是网络应用程序开发的新手。刚刚开始学习Sinatra框架。我正在开发一个登录系统。 这是必要的代码:

require 'sinatra'
require 'openssl'
require 'encrypted_cookie'

configure do
  use Rack::Session::EncryptedCookie, :secret => "foo-bar-baz", :httponly => true

然后,如果他/她获得授权,我会在会话中存储用户名:

post '/' do
  if authorize(params[:name], params[:password], params[:csrfkey])
    session[:name] = params[:name]
  end
end

cookie可以加密。它还记住了会话值。

但是在使用Firebug时,我注意到在每次请求(页面加载,刷新等)时,cookie的内容都会被更改。我的意思是彻底改变了似乎Sinatra在每次请求时都会发送新的cookie。

以前,我使用的是enable :sessions&饼干永远不会改变。

所以我的问题是,在会话期间每次请求都更改cookie的内容是否正常?

是否因为加密而发生?

我搜索了高和低在网上低,但没有人有这个问题,我猜..

1 个答案:

答案 0 :(得分:4)

source for encrypted_cookie显示generates different encrypted output every time it is called regardless of the input。这有两个原因:

  • 必须知道上次请求期间的会话值是什么。它没有,它只是接受单个输入,给定的会话。如果您希望绕过这个并且只是重写cookie(我想),您可以,因为您在Sinatra应用程序中有更多可用的额外信息。
  • 它更安全。它不泄漏信息(如果cookie没有改变,那么cookie的观察者在请求期间没有任何改变),并且它使攻击者没有时间尝试获得有意义的价值。