有一个非常简单的问题。我正在做 Michael Hartl 的 Railstutorial,它讨论了使用会话方法:
借助 Rails 定义的 session 方法,用户登录很简单...我们可以将 session 视为一个散列,并按如下方式分配给它:
session[:user_id] = user.id
它说你可以将会话视为散列,但我很困惑,因为它被称为会话方法,所以实际上有什么被调用吗?我的猜测是,通过插入会话哈希,有一个会话函数可以查看哈希以查看是否存在任何内容?我不太确定它是如何工作的。
如果不提及的话就太粗鲁了Session文档 http://guides.rubyonrails.org/action_controller_overview.html#session:
所有会话存储使用cookie来存储每个会话的唯一ID(您必须使用 cookie,Rails 不允许您在 URL 中传递会话 ID,因为这不太安全)。
基本上,每次有人访问您的 Rails 应用程序时,它都会在其浏览器中创建一个小 cookie,可通过唯一 ID 进行识别(not用户身份)。
这个 cookie 本质上是一个 Ruby 哈希,因此您可以在其中存储哈希数据:
session[:your_hash] = "TEST"
这将允许您存储小数据片段(例如user_id
或其他)通过请求。
Rails 这样做的主要原因是HTTP
成为一个无国籍的协议 https://en.wikipedia.org/wiki/Stateless_protocol.
无国籍协议与stateful协议;它们不保留请求之间的状态,因此每次访问应用程序的新实例时,您都必须重新调用数据等。
简单地说,这意味着 Rails 是一个“愚蠢”的系统 - 只记住每个请求发送给它的数据。会话变量 http://www.w3schools.com/php/php_sessions.asp几十年来,开发人员一直在使用它来提供有关用户/偏好等的基本信息,允许您根据每个请求“重建”用户。
这就是为什么你必须保存user_id
作为会话 - 每次您希望引用登录用户的数据时,都必须根据该数据构建id
存储在会话哈希中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)