【问题标题】:Are session variables in 'session' or 'user_session' in Rails with Devise?带有设计的 Rails 中的“会话”或“用户会话”中的会话变量是什么?
【发布时间】:2018-08-23 18:06:09
【问题描述】:

我想在 Ruby on Rails 应用程序的用户会话中存储一条非关键非机密信息。用户模型是用 Devise 设置的。我该怎么做呢?各种指南给出了相互矛盾和不完整的信息。 session[:foo]? user_session[:foo]?我是否需要设置一些东西才能使用它 - 例如在设置会话变量之前获取 gem、配置一些东西或插入任何行?

为了提供上下文 - 用户可能会连续创建多个新项目,因此如果 new 表单能够记住并根据他们之前选择的内容预先选择类别,那就太好了。如果有更好的方法可以做到这一点,我愿意接受建议。我对这一切都很陌生。谢谢!!

【问题讨论】:

  • 您是否强制用户始终拥有最后一项属性?如果他们想使用最后的项目设置,也许你可以复制该项目
  • Session is a bad database :) 您可以在表单类别输入中使用:value: @current_user.items.last.category(只是一个伪代码,因为我不知道类别、属性或关联模型是什么)

标签: ruby-on-rails ruby session devise session-variables


【解决方案1】:

会话变量在 Rails 中的“会话”或“用户会话”中吗?

简单的答案是会话变量被命名为session

一个会话通常由一个哈希值和一个会话 ID(通常是 32 个字符的字符串)组成,用于标识哈希。每个发送到客户端浏览器的 cookie 都包含会话 ID。反之亦然:浏览器将根据客户端的每个请求将其发送到服务器。在 Rails 中,您可以使用 session 方法保存和检索值:

session[:cat_id] = cat_id
Category.find(session[:cat_id])

你可以阅读这个Rails Guide关于会话。

ActionDispatch::Session::CookieStore

【讨论】:

  • 感谢您的回答!我查看了该指南,但仍然对它在使用前是否需要某种激活或配置感到困惑。是吗?
【解决方案2】:

默认的 Rails 会话对象可以通过 session 辅助方法访问。它使您可以访问一些数据块,并绑定到存储在浏览器中的 cookie 值。

user_session 助手由 Devise gem 提供。当用户在服务器上进行身份验证时,它通过限制对特定会话数据的访问来为您提供额外的安全性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2010-10-03
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多