Rails 中的 session 是方法还是哈希?有点困惑

2024-01-17

有一个非常简单的问题。我正在做 Michael Hartl 的 Railstutorial,它讨论了使用会话方法:

借助 Rails 定义的 session 方法,用户登录很简单...我们可以将 session 视为一个散列,并按如下方式分配给它:

session[:user_id] = user.id

它说你可以将会话视为散列,但我很困惑,因为它被称为会话方法,所以实际上有什么被调用吗?我的猜测是,通过插入会话哈希,有一个会话函数可以查看哈希以查看是否存在任何内容?我不太确定它是如何工作的。


如果不提及的话就太粗鲁了Session文档 http://guides.rubyonrails.org/action_controller_overview.html#session:

所有会话存储使用cookie来存储每个会话的唯一ID(您必须使用 cookie,Rails 不允许您在 URL 中传递会话 ID,因为这不太安全)。

基本上,每次有人访问您的 Rails 应用程序时,它都会在其浏览器中创建一个小 cookie,可通过唯一 ID 进行识别(not用户身份)。

这个 cookie 本质上是一个 Ruby 哈希,因此您可以在其中存储哈希数据:

session[:your_hash] = "TEST"

这将允许您存储小数据片段(例如user_id或其他)通过请求。


Rails 这样做的主要原因是HTTP成为一个无国籍的协议 https://en.wikipedia.org/wiki/Stateless_protocol.

无国籍协议与stateful协议;它们不保留请求之间的状态,因此每次访问应用程序的新实例时,您都必须重新调用数据等。

简单地说,这意味着 Rails 是一个“愚蠢”的系统 - 只记住每个请求发送给它的数据。会话变量 http://www.w3schools.com/php/php_sessions.asp几十年来,开发人员一直在使用它来提供有关用户/偏好等的基本信息,允许您根据每个请求“重建”用户。

这就是为什么你必须保存user_id作为会话 - 每次您希望引用登录用户的数据时,都必须根据该数据构建id存储在会话哈希中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 中的 session 是方法还是哈希?有点困惑 的相关文章

  • ruby 的 String .hash 方法如何工作?

    我只是红宝石的新手 我见过一个字符串方法 String hash 例如 在irb 我试过了 gt gt mgpyone hash returns gt 144611910 这个方法是如何工作的 The hash方法是为所有对象定义的 看文档
  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • Ruby on Rails 3 - 为每个请求重新加载 lib 目录

    我正在为 Rails 3 应用程序创建一个新引擎 正如您所猜测的 该引擎位于我的应用程序的 lib 目录中 但是 我在开发它时遇到了一些问题 事实上 每次更改引擎中的某些内容时 我都需要重新启动服务器 有办法避免这种情况吗 我可以强制rai
  • Rails 3:使用 Simple_form 如何创建一个向specialities#create 发布帖子的表单?

    如何使用 Simple form 创建一个向specialities create 发布帖子的表单 我试过这个
  • 什么是 - 获取的是一个目录 - 错误消息

    我收到这个奇怪的错误 Users gideon Documents ca ruby rubytactoe lib player rb 13 in gets Is a directory spec Errno EISDIR 玩家规格 rb r
  • RSpec 请求规范发布一个空数组

    我目前正在 Rails 中开发 API 端点 如果我需要的数据无效 我想确保端点响应具有正确的错误状态 我需要一个 id 数组 无效值之一是空数组 Valid vendor district ids 2 4 5 6 Invalid vend
  • Rails Capistrano 3 - 如何将 production.log 文件共享到 Capistrano 的共享文件夹中?

    我正在使用 Capistrano 3 与我的 Rails 应用程序一起部署 问题是 每次我将应用程序部署到服务器时 log development log 文件都会重置 我听说可以将 production log 文件放入共享文件夹中并在每
  • Rails 从 OrdersController 更新用户模型的属性

    这是我的代码 订单控制器类 def create order Order new params order if order purchase work GATEWAY store credit card options result wo
  • 如何在两个模型之间建立两个 has_many/belongs_to 关系?

    我有一个Project模型 以及一个Contact模型 项目模型有一个所有者和一个客户 两者都是Contacts 显然我遇到了一些不明确的事情 因为如果我有联系人并询问其项目 Rails 将不知道我询问的是它的项目是客户还是所有者 到目前为
  • 两个 ruby​​ 进程之间的通信可能/容易吗?

    如果我有一个 ruby 脚本Daemon顾名思义 它作为守护进程运行 监视系统的某些部分并能够执行需要身份验证的命令 例如更改权限 是否有一种简单的方法来拥有第二个 ruby 脚本 例如client 与该脚本通信并向其发送命令 询问信息 我
  • Rails - 安装 Spree 时出现问题

    我在 Rails 应用程序中安装 Spree 时遇到问题 当我运行 gem spree 时 按照说明http spreecommerce com documentation getting started html http spreeco
  • 多次部署后 Heroku Slug 大小

    我有一个红宝石 on Rails非常接近 slug 大小限制 300mb 的应用程序 我已经尽可能地减小了尺寸 slugignore但还没有得到我想要的结果 一时兴起 我尝试创建一个新的Heroku应用程序并向其部署相同的 git 存储库
  • 带回形针、导轨的水印图像 4

    我一直在尝试按照中列出的答案向我的图像添加水印带有回形针的水印 https stackoverflow com questions 13517757 watermark with paperclip 水印 rb module Papercl
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • Emacs、ruby:将 do 结束块转换为大括号,反之亦然

    我经常发现自己转换这样的代码 before do something end to before something 有没有办法在 emacs 中自动执行此任务 我使用 ruby mode 和 rinary 但它们在这里没有太大帮助 rub
  • Rails - 用于集合集的单选按钮

    我有以下输出选择框 br 替代输出单选按钮的 Rails 方法是什么 对于单选按钮 您必须自行迭代并输出每个单选按钮及其标签 事实上这真的很容易
  • 在rails生成脚手架中跳过JSON格式

    当您使用类似命令生成 Rails 脚手架时rails g scaffold Thing有什么办法可以避免变得烦人吗 respond to do format format html index html erb format json re
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • Rails 3 SSL 路由从 https 重定向到 http

    这个问题与此相关SO 问答 rails 3 ssl deprecation https stackoverflow com questions 3634100 rails 3 ssl deprecation建议使用routes rb和类似的
  • rspec 中的模拟方法链

    有一系列方法可以获得user目的 我试图模拟以下内容以返回user in my Factory Girl current user AuthorizeApiRequest call request headers result 我可以模拟该

随机推荐

  • Haskell 中具有多个构造函数的记录类型

    很多时候 当我使用 Haskell 编写某些内容时 我需要具有多个构造函数的记录 例如 我想开发某种逻辑方案建模 我想到了这样的类型 data Block a Binary binOp a gt a gt a opName String i
  • Hibernate 抓取条件被忽略

    我有一些与 LoginSession 类具有一对多关系的 User 类 我的 User 类中有一个 LoginSession 集合 Entity name T User public class User OneToMany fetch F
  • javascript中判断对象是否有属性和值

    我想检查一个对象是否具有某物的属性并且其值是否等于某个值 var test name joey age 15 name hell age 12 就是这样 一个对象数组 现在我想在对象内部进行搜索 如果该对象包含我想要的内容 则返回 true
  • 非阻塞 multiprocessing.connection.Listener?

    我使用 multiprocessing connection Listener 进行进程之间的通信 它对我来说很有魅力 现在我真的很喜欢我的主循环在客户端命令之间做其他事情 不幸的是 listener accept 会阻止执行 直到建立来自
  • 你会如何设计一个可破解的网址

    想象一下 您有一组以良好的树形层次结构组织的产品类别 并且您希望提供可修改的 URL 来浏览这些产品类别 你可以做这样的事情 catalog categorya categoryb categoryc 然后 您可以很容易地找出应该列出产品的
  • 如何删除具有指针成员的类的指针?

    我的意思是 如果我有这样的课程 class A int pi A pa 当我打电话时delete pa will pi被删除 您需要定义一个析构函数来delete pi 此外 您还需要定义复制构造函数和赋值运算符 否则当实例A被复制的两个对
  • 将 Google Play 游戏与 Firebase 混合使用

    我使用 google games api 将排行榜添加到我的 android 游戏中 现在我想使用 Android Studio 的 Firebase 向导 添加横幅广告 它构建得很好 但是当我尝试创建 apk 时 出现以下错误 错误 将字
  • Linux,需要准确的程序计时。调度程序唤醒程序

    我有一个在 Linux 系统上运行的线程 我需要以尽可能准确的时间间隔执行它 例如 每毫秒执行一次 目前 这是通过创建一个计时器来完成的 timerfd create CLOCK MONOTONIC 0 然后在结构中传递所需的睡眠时间 ti
  • 使用 R 中的 glmulti 包对 akaike 权重进行穷举搜索多元回归

    我想知道是否有人可以帮助我理解为什么当我在 R 中输入脚本时收到错误消息 对于一些背景信息 我正在研究6 个不同变量的效果 我认为是 63 种组合或模型 X 对于我的环境科学荣誉项目 在不同空间尺度上分别具有初级总产量和生态系统净产量 Y
  • 参考应用程序xml资源中的android库项目xml资源

    我有一个定义 XML 资源的 Android 库项目 让我们使用可绘制选择器作为示例 但我在字符串 样式等方面遇到问题 LibProject res drawable button selector xml 定义一个选择器 LibProje
  • Mongo 查找器和标准

    我在 Rails 应用程序中使用 MongoDB 和 Mongoid 映射器 但我不明白finders and criteria的查询 例如在 mongodb 文档中的部分Finders是查询Model all 但如果我使用它 例如User
  • 如何使用 Cypress 检查可能不存在的元素

    我正在编写 Cypress 测试来登录网站 有username and password字段和一个Submit按钮 大多数登录都很简单 但有时首先会出现一个警告对话框 必须将其关闭 我试过这个 cy get login username t
  • 浮点数在CPU内部是如何存储的?

    我是一名初学者 正在学习组装基础知识 现在 我在读这件事的时候 来到了这一段 它解释了浮点数如何存储在内存中 浮点数的指数是一个 8 位字段 允许大量或 要存储的小数 指数被解释为正数或 消极的 实际指数是 8 位字段的值减去 127 12
  • 在 python 中滚动 idxmax() ?

    我有一个 python DataFrame 其中包含一些财务数据 我正在尝试为其创建一些技术指标 我试图弄清楚如何使用移动窗口函数来加速该过程 而不是逐个元素地进行 对于每个索引 我想返回过去 30 天的最大索引 我已经实现了一个逐个元素的
  • 将列类型更改为tinyInteger

    尝试在 Laravel 5 2 迁移中将数据列类型更改为tinyInteger
  • Visual Studio 探查器输出

    我写了一个执行的小类Main 依次执行A 我预计Main 方法本身位于堆栈调用的根部 因为它是我的应用程序中最顶层的函数 所做的一切都应该执行by Main 我编写了以下代码来测试 namespace ProfilerTest class
  • 需要裁剪+调整大小约 300000 个文件。运行时间 = 4 天以上。如何加快 bash 脚本的速度?

    我正在努力创建视频间隔拍摄 我拍摄的所有照片都是以 4 3 宽高比拍摄的 jpg 图像 2592x1944 分辨率 我希望它们在 1920x1080 下均为 16 9 我写了一个小脚本来执行此操作 但过程不是很快 我花了大约 17 分钟来裁
  • 在 Xcode 4 GM 中,如何打开 LLDB?我看到的都是GDB

    在方案运行调试器弹出窗口中 它显示的只是 None 和 GDB 这是针对使用 LLVM 构建的 iPad 4 2 模拟器 你不能 用苹果员工的话说 LLDB 尚不可用于 iOS 开发 https devforums apple com me
  • 共享 php 会话

    我最近遇到了一个问题 我一直在尝试解决它 但没有运气 我试图使用 GlusterFS 在所有服务器上的多个服务器 php apache 级别上共享 php 会话 但是 尽管该会话在所有服务器上都可以访问 但一旦我访问不同的服务器 会话就不会
  • Rails 中的 session 是方法还是哈希?有点困惑

    有一个非常简单的问题 我正在做 Michael Hartl 的 Railstutorial 它讨论了使用会话方法 借助 Rails 定义的 session 方法 用户登录很简单 我们可以将 session 视为一个散列 并按如下方式分配给它