【发布时间】:2013-06-25 19:47:12
【问题描述】:
我正在学习 Sinatra 框架并开发登录系统。我遇到了两种使用 cookie 的方法。
一个简单的 Sinatra 内置方式:
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 内容(这里也使用了session.inspect):
{:name=>"john"}
为什么enable :sessions 会创建一个包含所有这些信息的大 cookie 以及为什么需要它(尤其是那些 HTTP_... 部分?)因为 Rack::Session::EncryptedCookie 没有生成任何信息。
您是否认为应该首选使用 enable :sessions,因为它具有 csrf 令牌和会话 ID?还是你觉得Rack::Session::EncryptedCookie已经加密了就够了?
我安装了以下版本的 gem:
encrypted_cookie (0.0.4)
rack (1.5.2)
rack_csrf (2.4.0)
sinatra (1.4.3)
thin (1.5.1)
如果您需要更多信息,请告诉我...
【问题讨论】:
标签: ruby cookies sinatra session-cookies rack