Rack::Session::Cookie的基本使用示例有哪些?

6

我找不到任何使用 Rack::Session::Cookie 的简单示例,我想能够在 cookie 中存储信息,并在以后的请求中访问它并使其过期。

这些是我能找到的唯一示例:

这是我目前得到的结果:

 use Rack::Session::Cookie, :key => 'rack.session',
                               :domain => 'foo.com',
                               :path => '/',
                               :expire_after => 2592000,
                               :secret => 'change_me'

然后进行设置/检索:

env['rack.session'][:msg]="Hello Rack"

我找不到其他关于此设置的指南或示例。有人能帮忙吗?

2个回答

2

你已经在你的问题中设置了cookie。我不确定你所说的“设置”是否指其他内容。

为了简化,你可以使用 session[KEY] 而不是 env['rack.session']

session[:key] = "vaue" # will set the value
session[:key] # will return the value

简单的Sinatra示例
require 'sinatra'
set :sessions, true
get '/' do
    session[:key_set] = "set"
    "Hello"
end
get "/sess" do
    session[:key_set]
end

更新

我认为它对你无效是因为你设置了无效的域名。所以我必须去掉 :domain => 'foo.com',。顺便说一句,Sinatra包装了Rack cookie并公开了session助手程序。所以上述代码对我而言运行良好。我相信以下代码应该可以正常工作。

require 'sinatra'
use Rack::Session::Cookie, :key => 'rack.session',
  :expire_after => 2592000,
  :secret => 'change_me'
get '/' do
  msg = params["msg"] || "not set"
  env["rack.session"][:msg] = msg
  "Hello"
end
get "/sess" do
  request.session["msg"]
end
  • 设置会话值msg访问根或/ ,如果您传递?msg=someSTring ,它应该使用新值设置msg。
  • 访问/sess以查看会话中的内容。

您可以从如何在Rack应用程序中设置/获取会话变量?获得一些提示。


我发现的问题是,如果我重新启动Web服务,会话将失效,并且设置的会话不会保存在cookie中。因此,如果您访问'/',重新启动sinatra,然后访问'/sess',您将不会返回任何信息。 - Dishcandanty
1
请注意,上面的代码是针对 Sinatra 的,与您发布的代码片段略有不同,但基本上它在内部包装了 Rack Cookie。我没有直接使用过 Rack,所以我花了一些时间来弄清楚这个问题。请参考上面更新的答案。 - ch4nd4n
我认为你应该澄清env["rack.session"][:msg]request.session["msg"]之间的区别。 - Redoman

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接