Rails v2.3: разница между сессией и куки - PullRequest
16 голосов
/ 12 октября 2011

Я изучаю Rails, читая онлайн-руководство (для Rails v2.3 ).Руководство отличное, однако, для меня это путаница:

есть глава, объясняющая Сеанс Rails, а другая глава объясняет Cookies Rails,Объяснение легко понять отдельно, но, сравнивая их, читатель, как я, не видит существенной разницы между сессией и файлами cookie.В особенности , в каких ситуациях следует использовать сеанс и в каких ситуациях следует использовать файлы cookie?

Кроме того, в главе, посвященной сеансу, есть понятие CookieStore, в чем разницаТогда между CookieStore и Cookies?

Может кто-нибудь объяснить мне это?

Ответы [ 4 ]

24 голосов
/ 12 октября 2011

Сессии и файлы cookie позволяют хранить некоторую информацию (например, идентификатор current_user) между двумя или более запросами, которые (в http) в противном случае не сохраняют состояния.

Но сессия - это скорее абстрактное понятие, связанное с понятием нахождения в определенном состоянии в течение определенного периода времени: содержащаяся в нем информация может храниться в базе данных, в файле на стороне сервера, вRedis хэш ИЛИ в печенье .

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

TL; DR: сеанс абстрактная концепция хранения временных данных.Печенье один (общий) способ сделать это.

8 голосов
/ 12 октября 2011

Файл cookie - это небольшой текстовый файл, сохраняемый в браузере.

Сеанс - это понятие состояния «используется», и это состояние может иметь связанные с ним данные.Rails отслеживает сеансы с файлами cookie и позволяет выбирать другое хранилище для связанных данных и получать к нему доступ с тем же интерфейсом session.

CookieStore означает, что вся информация о сеансе хранится в самом файле cookie.Вы можете использовать другие хранилища, где это уместно, и они все еще будут доступны с вашими session методами доступа.

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

Пример 1, сохранение корзины покупок вошедшего в систему пользователя в сеансе:

session[:embarassing_products] = ['ooh',
                                  'naughty',
                                  'lucky_im_using_activerecord_store',
                                  'only_the_session_id_is_in_the_cookie',
                                  'other_data_arent_in_the_browser']

Корзина покупоксохраняется для сеанса пользователя.Вы можете настроить сеанс так, чтобы он завершался при закрытии окна браузера, когда пользователь выходит из системы или когда проходит определенное время.

Пример 2, запоминание последнего предпочтения языка браузера для вашего домена в файле cookie:

cookie[:lang] = 'en-US'

Эта информация хранится в самом файле cookie.Если срок действия файла cookie не истек или он не был удален вами или пользователем, он остается в браузере.

6 голосов
/ 12 октября 2011

Что касается меня, то основное отличие заключается в том, что данные сеанса хранятся на сервере, тогда как файлы cookie хранятся на клиенте (браузере).

Таким образом, вы можете доверять данным сеанса. Информация из cookie-файла может быть изменена, украдена, и, таким образом, на нее нельзя полагаться для критического использования (например, для правильного доступа).

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

3 голосов
/ 12 апреля 2013

И, как правило, сеанс продолжается только до тех пор, пока пользователь не закроет свой браузер. Это полезно для типичных логинов. Принимая во внимание, что если вам нужна информация для сохранения между сеансами, вы можете использовать cookie с более длительным сроком действия, например, флаг «Запомнить меня», который сохраняется даже после перезапуска браузера.

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