【问题标题】:Is session a method or hash in Rails? Slightly confusedsession 是 Rails 中的方法还是哈希?有点困惑
【发布时间】:2016-01-22 10:58:09
【问题描述】:

有一个非常简单的问题。我正在做 Michael Hartl 的 railstutorial,它谈到了使用会话方法:

借助 Rails 定义的 session 方法让用户登录很简单...我们可以将 session 视为一个哈希,并按如下方式分配给它:

session[:user_id] = user.id

它说您可以将会话视为哈希,但我很困惑,因为它被称为会话方法,所以实际上调用了什么?我的猜测是,通过插入会话哈希,有一个会话函数可以查看哈希以查看是否存在任何内容?我不太确定它是如何工作的。

【问题讨论】:

    标签: ruby-on-rails ruby session


    【解决方案1】:

    更不用说Session documentation

    所有会话存储使用 cookie 存储每个会话的唯一 ID(您必须使用 cookie,Rails 不允许您在 URL 中传递会话 ID,因为这样不太安全) .

    基本上,每次有人访问您的 Rails 应用时,它都会在他们的浏览器中创建一个小 cookie,可通过唯一 ID(用户 ID)进行识别。

    这个 cookie 本质上是一个 Ruby 哈希,因此您可以在其中存储哈希数据:

    session[:your_hash] = "TEST"
    

    这将允许您通过请求存储小的 sn-ps 数据(例如 user_id 或其他)。


    Rails 出现这种情况的主要原因是 HTTPstateless protocol

    Stateless 协议与 stateful 协议相反;它们不保留请求之间的状态,因此每次访问应用程序的新实例时,您都必须重新调用数据等。

    简单地说,这意味着 Rails 是一个“愚蠢”的系统——只记住你每次请求发送给它的数据。几十年来,Session variables 一直被开发人员用来提供有关用户/偏好等的基本信息,让您可以根据每个请求“重建”用户。

    这就是为什么您必须将 user_id 保存为会话的原因 - 每次您希望引用登录用户的数据时,都必须从存储在会话哈希中的 id 构建它。

    【讨论】:

      【解决方案2】:

      它是一种返回对象的方法,该对象支持(某些)Hash 对象支持的相同方法,例如[][]=。实际上,它是一个ActionDispatch::Request::Session 对象。

      【讨论】:

        猜你喜欢
        • 2017-10-19
        • 2017-01-30
        • 1970-01-01
        • 2014-12-14
        • 2010-10-19
        • 1970-01-01
        • 1970-01-01
        • 2022-10-23
        • 2016-05-03
        相关资源
        最近更新 更多