‘会话’来自哪里?
我正在我的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指南 。