我正在學習Sinatra框架&開發登錄系統。我遇到了兩種使用cookie的方法。使用Sinatra會話和Rack :: Session :: EncryptedCookie的cookie內容的差異
一個簡單的屈內置方式:
enable :sessions
set :session_secret, 'random-key'
這種方法會產生以下的cookie內容而登錄。(用於session.inspect
獲得輸出):
{"session_id"=>"6be0b9a31831604ba51114d265ba952482e0b2da6ced6c54e15ebe7f212858ca",
"tracking"=>{"HTTP_USER_AGENT"=>"b8c1e8f89eeaea0b825bed0d811f0c7678e98c74",
"HTTP_ACCEPT_ENCODING"=>"a0bfc876d68fe7aea700da5ea8925abac6f2f794",
"HTTP_ACCEPT_LANGUAGE"=>"dd065ed263c67d799f943ab6c39b55c5e008cbb5"},
"csrf"=>"b480324f510e4f391d15cee8236a8fb74a5aaa5ce2f9ad38e4dbb025a823b16e",
"name"=>"john"}
另一種方法是使用一個加密的Cookie:
require 'sinatra'
require 'encrypted_cookie'
use Rack::Session::EncryptedCookie, :secret => "random-key"
但是這種方法產生了以下cookie con在登錄帳篷(使用session.inspect
這裏太):
{:name=>"john"}
爲什麼enable :sessions
與所有的信息&建立這樣一個大餅乾爲什麼需要它(特別是HTTP _...部分?)因爲Rack::Session::EncryptedCookie
不生成任何它。
您是否認爲使用enable :sessions
應該是首選的,因爲它具有csrf標記&會話ID?或者你認爲Rack::Session::EncryptedCookie
已經足夠,因爲它被加密了嗎?
我有以下安裝寶石的版本:
encrypted_cookie (0.0.4)
rack (1.5.2)
rack_csrf (2.4.0)
sinatra (1.4.3)
thin (1.5.1)
請告訴我,如果你需要更多信息...
是的。我知道 :)。但我的問題是,你會更喜歡'enable:sessions',因爲它正在生成會話id&csrf標記和所有額外的東西?或者你更喜歡'Rack :: Session :: EncryptedCookie',因爲它的加密和不需要這些添加? – Rahul
您是否在使用其他中間件?執行'enable:sessions'然後檢查會話會給我一個類似於'Rack :: Session :: EncryptedCookie'的輸出。就我個人而言,我使用'Rack :: Session :: Cookie'作爲中間件,並設置密鑰(從環境變量中加載)。 –
嗯。在使用'enable:sessions'方法時,我沒有使用任何其他中間件。順便說一句,我編輯的問題,包括所需的寶石版本。與你相比,我可能有不同版本的寶石。任何線索? – Rahul