Rails Session

2024 年 12 月 18 日 | 阅读 4 分钟

Rails session 仅在控制器或视图中可用,并且可以使用不同的存储机制。它是一个存储来自第一个请求的数据的地方,这些数据可以从以后的请求中读取。

以下是 Rails 中 session 的一些存储机制

  • ActionDispatch::Session::CookieStore - 将所有内容存储在客户端。
  • ActionDispatch::Session::CacheStore - 将数据存储在 Rails 缓存中。
  • ActionDispatch::Session::ActiveRecordStore - 使用 Active Record 将数据存储在数据库中。
  • ActionDispatch::Session::MemCacheStore - 将数据存储在 memcached 集群中

所有存储机制都使用 cookie 来存储每个 session 的唯一 ID。 通常,此 ID 会在服务器上查找 session 数据,例如数据库表。 存在一个例外,即默认的、推荐的 session 存储是 CookieStore,它将所有 session 数据存储在 cookie 本身中。它非常轻量级,并且在使用 session 之前在新应用程序中不需要任何设置。 cookie 数据已加密并经过加密签名,以使其防篡改。

不应将复杂对象存储在 session 中,因为服务器可能不会在请求之间重新组装它们,最终会导致错误。


访问 Session

可以通过 session 实例方法访问 session。 如果在操作代码中不访问 session,则不会加载它们。

Session 值使用键/值对存储,类似于哈希。 它们通常是 32 位字符长的字符串。

在 Rails 中,可以使用 session 方法保存和检索数据。

要将数据存储在 session 中,请将其分配给键。

要从 session 中删除数据,请将该键分配为 nil。

要重置整个 session,请使用 reset_session。


Session 示例

我们将使用 session 创建一个简单的登录表单。 一旦用户登录,他的凭据将被保存。 只有登录用户才能登录。 您还可以查看所有登录用户。

步骤 1 创建一个应用程序日志

步骤 2 将您的目录更改为 log

步骤 3 转到应用程序的 Gemfile。 激活行 gem 'bcrypt' 并停用文件中的行 gem 'jbuilder'。

步骤 4 现在运行 bundle

步骤 5 创建一个控制器。

步骤 6 更改 config/routes.rb 文件。

步骤 7 生成一个用户脚手架。

步骤 8 迁移您的数据库。

步骤 9 转到 app/models/user.rb 文件并编写以下代码。

步骤 10 我们需要一个 session 机制来创建登录和注销过程。

步骤 11 转到 config/routes.rb 文件并更改以下数据。

步骤 12 在 app/views/sessions/new.html.erb 文件中创建一个登录表单。

步骤 13 转到 app/controllers/sessions_controller.rb 文件并编写以下代码。

步骤 14 我们需要创建一个 current_user 方法来访问应用程序中的当前用户。 转到 app/controllers/application_controller.rb 文件并编写以下代码。

步骤 15 转到 app/views/layouts/application.html.erb 文件并在正文中编写以下代码。

步骤 16 从 app/views/users/show.html.erb 和 app/views/layouts/index.html.erb 文件中删除以下行。

步骤 17 当新用户注册时,他/她将自动登录。 为此,我们需要在 app/controllers/users_controller.rb 文件中设置 session。

步骤 18 在控制台中启动您的 Rails 服务器。

步骤 19 转到浏览器。

Rails Ruby Session 1

让我们注册一个用户 Anna。

Rails Ruby Session 2
Rails Ruby Session 3

单击“后退”按钮后,您可以看到所有已登录用户。

Rails Ruby Session 4

现在让我们从用户 Anna 登录。

Rails Ruby Session 5 Rails Ruby Session 6