Rails:如何在会话中存储数据?
我正在Rails中创建一个写作考试练习Web应用程序。 问题是,如果用户的答案被提交到互联网,ETS很容易检测到它们。 因此,当用户在真实测试中再次写出他们的答案时,ETS会认为他们正在从互联网上回答答案并给予他们相当低的分数。
我的方法是将用户的eassay存储在会话中 。 所以它根本不会上传到互联网。 但是,如何在会话中存储对象?
要在会话中存储内容,您可以执行以下操作:
session[:answer] = "some answer"
然后您可以通过以下方式致电答案:
session[:answer]
或者您可以使用HTML5 localstorage:
- Rails将数据存储在数据库中 (不必在“Internet”上)
- 在会话中存储大量数据是一个非常糟糕的主意
会议
Rails会话旨在保持整个应用程序的一致性
IMO,会话最好用于存储数据的“片段”(例如单个对象, ids
等),最适合用于这些类型的函数:
- 购物车
- 以安全为中心的系统(保持安全数据)
- 身份validation(保持用户登录)
数据库
您问的是如何在会话中存储人们的答案
我认为你应该将它们存储在数据库中,但要保护带有身份validation的数据库(例如Devise ):
#app/controllers/answers_controller.rb def new @answer = Answer.new end def create @answer = Answer.new(answer_params) @answer.save end private def answers_params params.require(:answer).permit(:body, :question_id).merge(user_id: current_user.id) end
这将允许您将答案存储在数据库中(数据库可以在您的本地计算机,本地Intranet或任何您想要的地方)
安全
您的关键是保护您的数据
这称为Authentication
,没有详细说明,这里有一个很好的资源:
http://railscasts.com/episodes/250-authentication-from-scratch
我的方法是将用户的eassay存储在会话中。 所以它根本不会上传到互联网。
从技术上讲,这是不正确的。 rails中会话的默认实现是基于cookie的。 因此,如果您在会话中写入内容,则会将其写入客户端上的cookie。 随着对服务器的每个后续请求,cookie被发送到服务器,我认为,它以某种方式连接到互联网。
此外,cookie和因此会话的大小受限(约4kb)。 因此,您可能无法将所有内容存储在会话中。
问题是,如果用户的答案被提交到互联网,ETS很容易检测到它们
这是真正的问题:
通常,如果不希望其他人(例如ETS)可以阅读您的内容,则限制对内容的访问。 通过密码或其他方式。
因此,使用某种身份validation(由@Rich Peck回答),要特别注意您的内容仅在成功validation后才可见,不要将密码提供给ETS,您应该没问题。