【问题标题】:Where does 'session' come from?“会话”从何而来?
【发布时间】:2014-08-21 08:53:56
【问题描述】:

我正在我的 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

【问题讨论】:

    标签: ruby-on-rails ruby session


    【解决方案1】:

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

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

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

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

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

    有关更多信息,我写了一个Rails Devise Tutorial,展示了如何使用 Devise 身份验证 gem 管理会话。

    【讨论】:

      【解决方案2】:

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

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

      您也可以通过设置config.session_store 配置变量来pick where to put your session store

      请参阅Rails guide 了解更多信息。

      【讨论】:

        猜你喜欢
        • 2019-09-03
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2016-11-03
        • 1970-01-01
        • 2016-07-10
        • 1970-01-01
        • 2016-12-31
        相关资源
        最近更新 更多