Rails: преимущества хранения сессии в базе данных? - PullRequest
12 голосов
/ 25 ноября 2010

Мне просто интересно, зачем хранить сессию в базе данных?Есть ли какое-либо преимущество для хранения сессии в базе данных?

Ответы [ 5 ]

24 голосов
/ 19 декабря 2010

Преимущество базы данных или memcached заключается в том, что данные сеанса не могут быть изменены на стороне клиента, и вы можете хранить больший объем данных, чем при использовании файлов cookie (4 КБ).

Если ваш сеанссохраняется в файлах cookie или в базе данных, и веб-служба перезапускается, после чего данные сеанса не теряются.Он может быть потерян только в том случае, если он хранится в memcached.

Если сервер сбалансирован по нагрузке, то данные сеанса передаются на веб-сервер, обслуживающий запрос, поэтому это не проблема с файлами cookie, база данныхили сеансы memcached.

Преимущество файлов cookie перед memcached или базой данных заключается в том, что клиент сохраняет данные сеанса, поэтому сервер не несет за них ответственность.файлы cookie будут передаваться клиенту и от него, так как ссылка на сеанс все еще нуждается в поддержке.

18 голосов
/ 25 ноября 2010

Я могу придумать две причины:

1) При перезапуске веб-службы данные сеанса не теряются

2) В среде с балансировкой нагрузки сеансданные хранятся в центральном местоположении, то есть любой сервер может обслуживать запрос и иметь доступ к данным сеанса.

7 голосов
/ 20 декабря 2010

Есть как минимум три причины, о которых я могу подумать. Если вы сохраните сеанс в БД, вы можете:

  • легкий доступ к нему на любом выполняемом вами экземпляре Rails. Поэтому, если у вас более одной машины, вам не нужно беспокоиться о распределении данных сеанса.
  • У вас нет сеанса ограничения сеанса 4 КБ, который применяется только при использовании хранилища сеансов cookie. Хотя вы не должны использовать сеанс для хранения объектов, вы можете использовать эту функцию однажды.
  • При использовании и RDBM (а не Memcached или любого другого непостоянного хранилища) вам не нужно беспокоиться о потере данных сеанса.
2 голосов
/ 29 июня 2012

еще одним преимуществом является обработка истечения сеанса на стороне сервера, как описано в разделе 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
2 голосов
/ 12 января 2011

Одно менее очевидное и небольшое преимущество наличия сеансов в базе данных состоит в том, что если вам нужно подсчитывать текущие сеансы и видеть имена других зарегистрированных пользователей, это проще реализовать, чем если бы вы использовали куки-файлы только для хранения данных сеансов или memcached.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...