Мне просто интересно, зачем хранить сеанс в базе данных? Есть ли какое-либо преимущество для хранения сеанса в базе данных?
Rails: Преимущества хранения сеанса в базе данных?
Ответ 1
Преимущество базы данных или memcached заключается в том, что данные сеанса не могут быть изменены на стороне клиента и что вы можете хранить больший объем данных, чем с помощью файлов cookie (4kB).
Если ваш сеанс хранится в файлах cookie или в базе данных, а веб-служба перезапускается, данные сеанса не теряются. Он может быть потерян только в том случае, если он хранится в memcached.
Если сервер сбалансирован по нагрузке, данные сеанса передаются на веб-сервер, обслуживающий этот запрос, поэтому это не проблема с сеансами куки, базы данных или memcached.
Преимущество файлов cookie поверх memcached или базы данных заключается в том, что клиент хранит данные сеанса, поэтому сервер не несет за это ответственности.
Имейте в виду, что оба способа cookie будут переданы клиенту и из него, потому что еще нужно сохранить ссылку на сеанс.
Ответ 2
Две причины, о которых я могу думать, заключаются в следующем:
1) Если веб-служба перезапускается, данные сеанса не теряются
2) В среде с балансировкой нагрузки данные сеанса хранятся в центральном месте, что означает, что любой сервер может обслуживать запрос и иметь доступ к данным сеанса.
Ответ 3
Есть по крайней мере три причины, о которых я могу думать. Если вы сохраните сеанс в БД, вы можете:
- легко получить доступ к любому экземпляру Rails, который вы выполняете. Поэтому, если у вас несколько машин, вам не нужно беспокоиться о распространении данных сеанса.
- У вас нет сеанса сеанса сеанса 4kb, который используется только при использовании хранилища сеансов файлов cookie. Хотя вы не должны использовать сеанс для хранения объектов, вы можете использовать эту функцию в определенный день.
- При использовании и RDBM (а не в Memcached или любом другом не сохраняемом хранилище) вам не нужно беспокоиться о потере данных сеанса.
Ответ 4
одно менее очевидное и небольшое преимущество в том, что сеансы в базе данных состоят в том, что если вам нужно подсчитывать текущие сеансы и просматривать имена других зарегистрированных пользователей, их проще реализовать, чем если бы вы использовали файлы cookie только для хранения данных сеанса или memcached.
Ответ 5
еще одно преимущество заключается в том, чтобы обрабатывать завершение сеанса на стороне сервера, как описано в разделе 2.9:
http://guides.rubyonrails.org/security.html
"Однако клиент может редактировать файлы cookie, которые хранятся в веб-браузере, поэтому срок действия сеансов на сервере более безопасен".
class Session < ActiveRecord::Base
def self.sweep(time = 1.hour)
if time.is_a?(String)
time = time.split.inject { |count, unit| count.to_i.send(unit) }
end
delete_all "updated_at < '#{time.ago.to_s(:db)}' OR
created_at < '#{2.days.ago.to_s(:db)}'"
end
end