‘会话’来自哪里?

我正在我的rails应用程序中构建会话控制器,我只是不确定为什么有些东西在这里工作。 在create和destroy操作中, session[index]被分配给nil或用户id。 但是这个会话哈希没有在任何地方定义(据我所见)。 这为何有效? 谁能为我澄清一下这个?

(为了清楚起见,没有会话模型)

  class SessionsController  "Logged in!" else render "new" end def destroy session[:user_id] = nil redirect_to products_url, :notice => "Logged out!" end end 

session实例方法的function类似于Hash,是Rails API的一部分。

Rails完成了设置加密,防篡改会话数据存储的所有工作。 默认情况下,会话数据在浏览器中保存为cookie。 您可以指定其他存储机制,但CookieStore是默认的,也是最方便的。

CookieStore默认设置在config / initializers / session_store.rb文件中:

 Rails.application.config.session_store :cookie_store, key: '_learn-rails_session' 

您可以在Rails中了解有关会话的更多信息:

  • RailsGuides动作控制器概述
  • Rails API ActionDispatch :: Session :: CookieStore

有关更多信息,我编写了一个Rails Devise Tutorial ,其中显示了如何使用Devise身份validationgem管理会话。

默认情况下,会话存储在客户端的cookie中(即用户的浏览器的cookie)。 它不存储在服务器端(即Rails应用程序实际运行的位置)。

当您使用session哈希时,Rails足够聪明,可以相应地查找/请求会话信息。 在默认情况下,Rails知道在浏览器的cookie中设置会话信息,或从浏览器的cookie中检索信息。

您还可以通过设置config.session_store配置变量来选择放置会话存储的位置。

有关详细信息,请参阅Rails指南 。