Rails: как хранить данные в сеансе?
Я делаю приложение для веб-приложений для написания экзаменов в Rails. Проблема в том, что если ответы пользователей будут отправлены в Интернет, они будут легко обнаружены ETS. Поэтому, когда пользователи снова напишут свои ответы в реальном тесте, ETS подумает, что они справляются с ответами из Интернета и дают им довольно низкий балл.
Мой подход к этому - это сохранить сеанс пользователя в сеансе. Таким образом, он не будет загружаться в Интернет вообще.
Но как я могу хранить объект в сеансе?
Ответы
Ответ 1
Чтобы сохранить что-то в сеансе, вы можете сделать:
session[:answer] = "some answer"
Затем вы можете позвонить с помощью:
session[:answer]
Или вы можете использовать HTML5 localstorage:
<script>
localStorage.setItem("essay", "text");
localStorage.getItem("essay"); // => "text"
</script>
Ответ 2
- Rails хранит данные в базе данных (не обязательно в "Интернете" )
- Сохранение большого количества данных в сеансах - действительно плохая идея.
Сессия
Rails-сессии предназначены для обеспечения согласованности во всем приложении
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
Это позволит вам хранить ответы в базе данных (база данных может быть на вашем локальном компьютере, локальной интрасети или где угодно)
Безопасность
Ключ для вас будет заключаться в защите ваших данных
Это называется Authentication
, и, не вдаваясь в подробности, вот отличный ресурс для вас:
http://railscasts.com/episodes/250-authentication-from-scratch
![enter image description here]()
Ответ 3
Мой подход к этому заключается в том, чтобы хранить сеанс пользователя в сеансе. Так что это будет не загружайте в Интернет вообще.
Технически это неверно. По умолчанию реализация сеансов в рельсах основана на файлах cookie. Поэтому, если вы пишете что-то на сессии, оно записывается в файл cookie на клиенте. При каждом следующем запросе на ваш сервер cookie отправляется на сервер, который, как я полагаю, каким-то образом связан с Интернетом.
Кроме того, файлы cookie и, следовательно, сеансы ограничены по размеру (около 4kb). Таким образом, вы не сможете хранить все в сеансе.
Проблема заключается в том, что если ответы пользователей отправляются в Интернет, они легко будут обнаружены ETS
Настоящий вопрос здесь:
Обычно, если вы не хотите, чтобы другие люди (например, ETS) могли читать ваш контент, вы ограничиваете доступ к контенту. Либо паролями, либо другими способами.
Итак, используйте некоторую аутентификацию (ответ by @Rich Peck), будьте осторожны, чтобы ваш контент был виден только после успешной аутентификации, не передавайте пароли в ETS, и вы должны быть в порядке.