我正在我的 Rails 应用程序中构建一个会话控制器,我只是不确定为什么有些东西在这里工作。在创建和销毁动作中,session[index]
被分配给 nil 或用户 ID。但这个会话哈希没有在任何地方定义(据我所知)。为什么这有效?谁能帮我澄清一下吗?
(为了清楚起见,没有会话模型)
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to products_url, :note => "Logged in!"
else
render "new"
end
def destroy
session[:user_id] = nil
redirect_to products_url, :notice => "Logged out!"
end
end
The session
实例方法的功能类似于 Hash,是 Rails API 的一部分。
Rails 完成设置加密、防篡改会话数据存储的所有工作。默认情况下,会话数据在浏览器中保存为 cookie。您可以指定其他存储机制,但是CookieStore
是默认的,也是最方便的。
The CookieStore
默认设置在配置/初始化器/session_store.rb file:
Rails.application.config.session_store :cookie_store, key: '_learn-rails_session'
您可以了解有关 Rails 中的会话的更多信息:
- Rails 指南 Actioncontroller 概述 http://guides.rubyonrails.org/action_controller_overview.html#session
- Rails API ActionDispatch::Session::CookieStore http://api.rubyonrails.org/classes/ActionDispatch/Session/CookieStore.html
有关更多信息,我写了一个Rails 设计教程 http://railsapps.github.io/rails-devise/显示了如何使用 Devise 身份验证 gem 管理会话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)