【发布时间】:2014-08-19 22:03:29
【问题描述】:
Ruby on Rails 指南中有如下内容:
不要在会话中存储大型对象。相反,您应该将它们存储在数据库中并将它们的 id 保存在会话中。 [..] – http://guides.rubyonrails.org/security.html#session-guidelines
我想将临时文件(例如文本文件和 1.2M JPEG 图片)与Ruby on Rails 4.1 中的用户会话连接起来。数据库是没有选择的。我不想将文件保存在 blob 中,也不想保留记录以获得ID,因为它是一个临时文件。我想要一个干净的系统,所以临时文件应该在它们过期后被清理。类似于PHP的会话管理。
Rails 提供的其他会话存储类型似乎也不适合此。
那里已经有宝石,我可以使用吗? 有没有我看不到的Rails 路径来做类似的事情?对于Rails,这种行为是否因某些原因不寻常?
Tl;博士
我最近才意识到PHP 存储会话内容的方式与Ruby on Rails 存储会话内容的方式之间的区别。 PHP 仅在客户端存储会话 ID - 内容存储在服务器上的文件中,而 Rails 及其 CookieStore 将所有内容保存在客户端。 PHP 的临时文件从PHP 5.3 开始被垃圾收集器清理,它是 cron 任务。
【问题讨论】:
-
只需将文件名存储在会话中的某处。只是不要忘记在会话被终止/过期时删除该文件名,否则您将拥有无数孤立的临时文件。 PHP 会清理会话文件,但不会清理您附加到该会话的任何文件——这不是 PHP 的工作。
-
你到底在存储什么?
-
@dax:临时文件 - 例如 1.2M 大小的 JPEG 图片。
标签: php ruby-on-rails ruby session ruby-on-rails-4