新手问题 Rails session 方法是约定的吗?

zix · October 02, 2016 · Last by IChou replied at October 02, 2016 · 2613 hits

在看 Ruby on Rails 教程 session 这里 书中说

“有 Rails 提供的 session 方法协助,登入用户很简单。(session 方法与 8.1.1 节生成的 Sessions 控制器没有关系。)我们可以把 session 视作一个哈希,按照下面的方式赋值:”

摘录来自: Michael Hartl. Ruby on Rails 教程”。 iBooks. 

代码是

module SessionsHelper

  # 登入指定的用户
  def log_in(user)
    session[:user_id] = user.id
  end
end

所以这里 session 是特殊的存在?我能否自己定义一个这样的哈希,用来存储一些信息?

session 通常用于再 server side 存贮用户相关的信息。每个用户对应的 session 都是不同的,这些 session 用 session id 区别。session id 通常保存在 cookie 里面。而 Rails 默认将 session 加密后保存在 cookie 里面。

我能否自己定义一个这样的哈希,用来存储一些信息?

理论上可以。但你必须保证每个用户都有一个独立的这样的 hash 以及这个 hash 你需要持久化保存在某个地方。

cookie 是啥?session 是啥?谷歌一下呗。

楼上说的对 另外 session 的存储方式是可选的,rails 默认使用 cookie 来存,也可以存在服务端的

说 session 是特殊的,也不算,你可以把它和 param 这个 hash 理解成一类,本质上是在中间件里实现的

然后你说你需要自己定义一个这样的 hash 来存信息,不是很理解,为用户会话传递信息用 session 足够了吧,有前置验证可以用 before_action

真要造一个也可以,按 session 的源码写个中间件加进去

You need to Sign in before reply, if you don't have an account, please Sign up first.