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

zix · 2016年10月02日 · 最后由 IChou 回复于 2016年10月02日 · 2450 次阅读

在看 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 的源码写个中间件加进去

需要 登录 后方可回复, 如果你还没有账号请 注册新账号