Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: How to store data in session?

Tags:

I'm making an writing exam practice web app in Rails. The problem is that if users' answers are submited to the Internet, they will easily be detected by ETS. So when users write their answers again in real test, ETS will think they are coping answers from Internet and give them a fairly low score.

My approach to this, is to store users' eassay in session. So it will not be upload to Internet at all. But, how can I store an object in session?

like image 992
cqcn1991 Avatar asked Feb 27 '14 10:02

cqcn1991


People also ask

Where does rails store session data?

By default rails uses cookies to store the session data. All data is stored in the client, not on the server.

How do you store values in a session?

The Session Storage basically consists of 4 main methods. setItem(key, value): This method is used to set the value into the Session Storage based on the key. getItem(key): This method is used to get the value that is stored into the Session Storage. It takes a key and returns the value.

Can I store file in session?

Yes you can save the file in session object.

How does session work in Rails?

Rails provides a session object for each user that accesses the application. If the user already has an active session, Rails uses the existing session. Otherwise a new session is created. Read more about sessions and how to use them in Action Controller Overview Guide.


2 Answers

To store something in a session you can do:

session[:answer] = "some answer" 

Then you can call the answer with:

session[:answer] 

Or you could use HTML5 localstorage:

<script>   localStorage.setItem("essay", "text");   localStorage.getItem("essay"); // => "text" </script> 
like image 167
crispychicken Avatar answered Oct 07 '22 19:10

crispychicken


  1. Rails stores data in a database (doesn't have to be on the "Internet")
  2. Storing lots of data in sessions is a really bad idea

Sessions

Rails sessions are meant to keep consistency throughout your app

IMO, sessions are best used for storing "snippets" of data (such as a single object, ids etc), and are best used for these types of functions:

  • Shopping carts
  • Security-centric systems (keeping secure data)
  • Authentication (keeping a user logged in)

Database

What you've asked is how you store people's answers in sessions

I would argue you should store them in a database, but secure that DB with authentication (such as 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  

This will allow you to store the answers in a database (the database can be on your local computer, local Intranet, or anywhere you want)


Security

The key for you will be to secure your data

This is called Authentication, and without going into huge detail, here's a great resource for you:

http://railscasts.com/episodes/250-authentication-from-scratch

enter image description here

like image 38
Richard Peck Avatar answered Oct 07 '22 21:10

Richard Peck