小编Rah*_*hul的帖子

使用Sinatra会话和Rack :: Session :: EncryptedCookie的cookie内容的差异

我正在学习Sinatra框架并开发一个登录系统.我遇到过两种使用cookie的方式.

一个简单的Sinatra内置方式:

enable :sessions
set :session_secret, 'random-key'
Run Code Online (Sandbox Code Playgroud)

登录时,此方法会生成以下cookie内容(用于session.inspect获取输出):

{"session_id"=>"6be0b9a31831604ba51114d265ba952482e0b2da6ced6c54e15ebe7f212858ca", 
"tracking"=>{"HTTP_USER_AGENT"=>"b8c1e8f89eeaea0b825bed0d811f0c7678e98c74", 
"HTTP_ACCEPT_ENCODING"=>"a0bfc876d68fe7aea700da5ea8925abac6f2f794", 
"HTTP_ACCEPT_LANGUAGE"=>"dd065ed263c67d799f943ab6c39b55c5e008cbb5"}, 
"csrf"=>"b480324f510e4f391d15cee8236a8fb74a5aaa5ce2f9ad38e4dbb025a823b16e",    
"name"=>"john"}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用加密的cookie:

require 'sinatra'
require 'encrypted_cookie'

use Rack::Session::EncryptedCookie, :secret => "random-key"
Run Code Online (Sandbox Code Playgroud)

但是这种方法在登录时会产生以下cookie内容(session.inspect也在这里使用):

{:name=>"john"}
Run Code Online (Sandbox Code Playgroud)

为什么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)
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息,请告诉我......

ruby cookies rack sinatra session-cookies

5
推荐指数
1
解决办法
1395
查看次数

标签 统计

cookies ×1

rack ×1

ruby ×1

session-cookies ×1

sinatra ×1