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