ruby - 使用 sinatra 和 Rack::Session::Encrypted Cookie 根据每个请求更改 Cookie

标签 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

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

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

cookie 是加密的。它还会记住 session 值。

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

以前,我使用的是 enable :sessions 并且 cookie 从未更改过。

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

它发生是因为它是加密的吗?

我在网上搜索了 high & low 但我猜没有人遇到这个问题..

最佳答案

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

  • 必须知道上次请求期间的 session 值是什么。它不会,它所做的只是接受一个输入,给定的 session .如果您希望规避此问题并重写 cookie(我想),您可以这样做,因为您可以在 Sinatra 应用程序的更高层获得额外信息。
  • 它更安全。它不会泄露信息(如果 cookie 没有改变,那么 cookie 的观察者就知道在请求期间没有任何改变),并且它给攻击者更少的时间来尝试获得有意义的值。

关于ruby - 使用 sinatra 和 Rack::Session::Encrypted Cookie 根据每个请求更改 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17352136/

相关文章:

javascript - Rails 3 不加载 .js.erb 文件

Java 到 ruby​​ AES/ECB/PKCS5Padding 加密

jquery - 切换缓存/cookie

c++ - android 上的 libcurl cookie 过期

javascript - 为什么这个 POST 请求不会向服务器发送 JSON 字符串?

ruby - Sinatra 的测试框架

ruby-on-rails - 如何在 Ruby on Rails 中实现无向图?

Ruby - 如何在返回字符串中的所有偶数值时保留空格?

java - 带有 Cookie 的 Android MediaPlayer URL

ruby - 使用 block 变量访问 Ruby 访问器