Подтвердить что ты не робот

Rails v2.3: Разница между сеансом и файлами cookie

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

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

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

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

4b9b3361

Ответ 1

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

Но сеанс скорее представляет собой абстрактную концепцию, связанную с понятием быть в определенном состоянии в течение определенного периода времени: содержащаяся в нем информация может быть сохранена в базе данных в файле на стороне сервера в redis hash ИЛИ в файле cookie.

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

TL; DR: сеанс абстрактной концепции хранения временных данных. Cookies - один из способов сделать это.

Ответ 2

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

Сеанс - это понятие состояния "использования", и это состояние может иметь связанные с ним данные. Rails отслеживает сеансы с помощью куки файлов и позволяет выбирать различное хранилище для связанных данных и получать доступ к нему с тем же интерфейсом 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 не истекает или удаляется (вами или пользователем), он остается внутри браузера.

Ответ 3

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

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

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

Ответ 4

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