【问题标题】:sessions in sinatra and creating a hash are similar?sinatra 中的会话和创建哈希是否相似?
【发布时间】: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"

标签: ruby sinatra


【解决方案1】:

我不确定您是在询问方括号还是对 Sinatra 的 session 实现感兴趣。

如果您询问方括号:它们只不过是一种方法,您可以在自己的类中定义它。在这里阅读更多:https://rickcarlino.com/2015/03/26/square_brackets-html.html

从上面的url中提取的一个小例子:

class FakeCollection
  attr_reader :items

  def initialize
    @items = {}
  end

  def [](index)
    @items[index] || "Not Found"
  end

  def []=(index, value)
    @items[index] = value
  end
end

example = FakeCollection.new

example[:x] = "Hello, world"

example[:x]
# => "Hello, world"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多