以下内容写在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
是不寻常的吗?
我刚刚意识到PHP
存储会话内容的方式与Ruby on Rails
如何存储的区别。 PHP
仅在客户端存储会话ID - 内容存储在服务器上的文件中,而Rails
使用CookieStore
保存客户端的所有内容。自PHP
以后,垃圾收集器清除了PHP 5.3
的临时文件及其cron任务。
答案 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]}%>" />