我是网络应用开发新手,刚开始学习 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/