如何在Rails中将临时文件与用户会话相关联?

时间:2014-08-19 13:46:48

标签: php ruby-on-rails ruby session ruby-on-rails-4

以下内容写在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是不寻常的吗?

铊组成; dr

我刚刚意识到PHP存储会话内容的方式与Ruby on Rails如何存储的区别。 PHP仅在客户端存储会话ID - 内容存储在服务器上的文件中,而Rails使用CookieStore保存客户端的所有内容。自PHP以后,垃圾收集器清除了PHP 5.3的临时文件及其cron任务。

1 个答案:

答案 0 :(得分:1)

使用memcache或类似的东西。创建一个令牌并将其存储在会话中,然后使用它来访问缓存。

对于PNG图像:

# controller
session[:tmp_token] = SecureRandom.hex(12)
Rails.cache.put(session[:tmp_token], binary_png_data_converted_to_base_64)

显示base64编码的png

<img src="data:image/png;base64, <%= Rails.cache.fetch(session[:tmp_token]}%>" />
相关问题