Rails:如何在会话中存储数据?

时间:2014-02-27 10:05:17

标签: ruby-on-rails session

我正在Rails中创建一个写作考试练习Web应用程序。问题是,如果用户的答案提交到互联网,ETS很容易检测到它们。因此,当用户在真实测试中再次写出他们的答案时,ETS会认为他们正在从互联网上回答答案并给予他们相当低的分数。

我的方法是在会话中存储用户的eassay 。所以它根本不会上传到互联网。 但是,如何在会话中存储对象?

3 个答案:

答案 0 :(得分:24)

要在会话中存储内容,您可以执行以下操作:

session[:answer] = "some answer"

然后你可以用:

来回答
session[:answer]

或者您可以使用HTML5 localstorage:

<script>
  localStorage.setItem("essay", "text");
  localStorage.getItem("essay"); // => "text"
</script>

答案 1 :(得分:5)

  1. Rails将数据存储在数据库中(不必在“Internet”上)
  2. 在会话中存储大量数据是真的坏主意

  3. <强>会话

    Rails sessions旨在保持整个应用的一致性

    IMO,会话最适合用于存储数据的“片段”(例如单个对象,ids等),最适合用于这些类型的函数:

    • 购物车
    • 以安全为中心的系统(保持安全数据)
    • 身份验证(保持用户登录)

    <强>数据库

    您问的是如何在会话中存储人们的答案

    我认为您应该将它们存储在数据库中,但使用authentication保护该数据库(例如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

    enter image description here

答案 2 :(得分:1)

  

我的方法是将用户的eassay存储在会话中。所以它会   根本不能上传到互联网。

从技术上讲,这是不正确的。 rails中会话的默认实现是基于cookie的。因此,如果您在会话中写入内容,则会将其写入客户端上的cookie。随着对服务器的每个后续请求,cookie被发送到服务器,我认为,它以某种方式连接到互联网。

此外,Cookie和会话的大小受限(约4kb)。因此,您可能无法将所有内容存储在会话中。

  

问题是,如果用户的答案被提交到互联网,   它们很容易被ETS检测到

这是真正的问题:

通常,如果不希望其他人(例如ETS)可以阅读您的内容,则限制对内容的访问。通过密码或其他方式。

所以,使用某种身份验证(由@Rich Peck回答),要特别注意您的内容只有在成功验证后才能看到,不要将密码提供给ETS,你应该没事。