Ruby Cookie会在每次请求时使用sinatra和Rack::Session::EncryptedCookie进行更改

Ruby Cookie会在每次请求时使用sinatra和Rack::Session::EncryptedCookie进行更改,ruby,cookies,sinatra,session-cookies,rack,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 '

我是网络应用开发新手&刚刚开始学习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从未更改

所以我的问题是,在会话过程中,每次请求都会更改cookie的内容,这正常吗

这是因为它是加密的吗

我在网上上下搜索,但我想没有人遇到这个问题。

结果表明这是个问题。原因有二:

  • 库必须知道上次请求期间的会话值。它不知道,它所做的只是接受给定会话的单个输入。如果你想绕过这一点,只是重写cookie(我想),你可以这样做,因为你在Sinatra应用程序的更高层有额外的可用信息
  • 它更安全。它不会泄漏信息(如果cookie没有更改,那么cookie的观察者在请求过程中不知道任何更改),并且它使攻击者尝试获取有意义的值的时间更短
    • 这表明它是正确的。原因有二:

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

      是的,这是正常的,实际上可能会防止某些类型的会话劫持攻击,但我不知道
      Rack::session::EncryptedCookie
      具体在做什么,因此无法提供详细答案。哦,好的。我只是想知道为什么cookie的内容在变化,即使会话内容根本没有变化。谢谢您的回复。:-)是的,这是正常的,事实上可能会防止某些类型的会话劫持攻击,但我不知道
      Rack::session::EncryptedCookie
      具体在做什么,因此无法提供详细答案。哦,好的。我只是想知道为什么cookie的内容在变化,即使会话内容根本没有变化。谢谢您的回复。:-)谢谢你这么清楚的解释!我会投票表决的答案,但现在没有足够的repv。@Rahul没问题,很高兴我能提供帮助。谢谢你这么清楚的解释!我会投票给你答案,但是现在没有足够的repv。@Rahul没问题,很高兴我能帮上忙。