【发布时间】:2019-10-01 17:49:31
【问题描述】:
我创建了一个会话,我有这样的代码
# sinatra.rb
enable :sessions
get '/foo' do
session[:message] = 'Hello World!'
redirect to('/bar')
end
get '/bar' do
session[:message] # => 'Hello World!'
end
非常相似
# test.rb
session = Hash.new
session[:message] = 'Hello World!'
puts session
那有什么区别呢?
【问题讨论】:
-
您可以通过以下方式找到答案。试试 Hash API 的其余部分:ruby-doc.org/core-2.6.4/Hash.html。如果从
session返回的任何内容都不是哈希,则它不会符合所有哈希(这将是不同的)。 -
除了可能不同的 api 之外,主要区别在于 sinatra 的功能跨请求保留数据,范围限定为用户的浏览器。你的哈希没有。
-
找到了一个类似的主题但是有Rails stackoverflow.com/questions/33293310/…
-
所有会话存储都使用 cookie 来存储每个会话的唯一 ID(您必须使用 cookie,Rails 不允许您在 URL 中传递会话 ID,因为这不太安全)。这个 cookie 本质上是一个 Ruby 哈希,因此您可以在其中存储哈希数据: session[:your_hash] = "TEST"