2010-11-25 2 views

ответ

24

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

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

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

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

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

18

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

1) Если веб перезапуске службы, данные сеанса не потеряли

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

+0

Возможно. Защищает ли он какой-то взлом? – Zeck 2010-11-25 15:38:01

+2

Частично да, есть последствия для безопасности для хранения данных сеанса в файлах cookie: http://guides.rubyonrails.org/security.html#session-storage. – bmancini 2010-11-25 16:16:14

+1

Что касается №2, то это преимущество также имеет хранилище на основе файлов cookie по умолчанию. Не то, чтобы у него не было собственных проблем, но это преимущество не уникально для хранилища DB/Memcache. – coreyward 2011-01-11 18:39:36

7

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

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

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

2

другое преимущество заключается в том, чтобы обрабатывать сеанса истечения на стороне сервера, как описано в разделе 2.9:

http://guides.rubyonrails.org/security.html

«Однако клиент может редактировать куки, которые хранятся в веб-браузер, так истекающий сеансов на сервере безопаснее ».

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 
Смежные вопросы