【问题标题】:How do I set/get session vars in a Rack app?如何在 Rack 应用程序中设置/获取会话变量?
【发布时间】:2012-05-14 03:35:07
【问题描述】:
use Rack::Session::Pool
...
session[:msg]="Hello Rack"

编辑:会话一词似乎没有解决。我在我的 config.ru 中包含了会话池中间件,并尝试在 ERB 文件中设置一个变量(我正在使用 Ruby Serve),它抱怨“未定义的局部变量或方法‘会话’”

谢谢!

【问题讨论】:

  • 什么不完全有效?会话助手根本不工作,还是没有设置 session[:msg]? session.inspect 给你什么?

标签: ruby session rack


【解决方案1】:

session 是一些 Web 框架的一部分,例如 SinatraRails 都有 session 方法。普通的rack 应用程序没有session 方法,除非您自己添加一个。

会话哈希存储在密钥 rack.session 下的机架环境哈希中,因此您可以像这样访问它(假设您已将机架环境命名为您的应用程序 env):

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

或者,您可以使用 Rack 内置的 request object,如下所示:

request = Rack::Request.new(env)
request.session[:msg]="Hello Rack"

【讨论】:

  • 但是为什么你也可以这样做:request.env['rack.session'][:msg]="Hello Rack"?如果我理解正确,Rack::Requestenv 的包装,但如果是这样,那么request.env[... 有什么意义?我无法理解它:\
  • @jj_Rack::Requestenv 散列的包装器,可让您轻松地做各种常见的事情,它还提供对env 散列n 的访问,您需要使用它直接用于Rack::Request 不提供的东西。
  • 感谢您确认并解释...但是,#envRack::Request 上可用的事实不是有点令人困惑吗? Rack::Request encapsulates env,但同时#env 可用于Rack::Request 以原始形式提供env.. 为什么当原来的env 仍然在任何地方都可用时,已经? 也许从类设计师的角度来看,这只是为了让Rack::Request 自身功能更加完整?只是想了解其背后的基本原理...谢谢!
  • @jj_ 是的,您可以直接使用env 而不必理会Rack::Response,但是该类提供了schemehost 之类的方法,您需要查找各种标题和如何使用它们来复制,以及轻松访问请求参数(包括解析查询字符串),因此使用起来更方便。
  • 我发现这不适用于 rack 1.6 和 rails 4.2。我找不到有效的界面。
【解决方案2】:

你需要加载rack::session 模块接下来可能像这里的cookie http://rack.rubyforge.org/doc/classes/Rack/Session/Cookie.html

这就像用例子来解释它。

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多