Вопрос о сессиях на основе файлов cookie Rails 3 - PullRequest
1 голос
/ 13 сентября 2010

В Rails 3 механизм хранения сеансов по умолчанию - cookie_store.Я предполагаю, что это означает, что содержимое внутри хеша сеанса сериализуется, кодируется и сохраняется в cookie в браузере?Означает ли это, что ничего (или очень мало) сеанса хранится на сервере?

У меня было несколько проблем, когда у меня была ошибка переполнения файла cookie, и я предполагаю, потому что я продолжал добавлять вмой пользовательский экземпляр (который также был связан / извлечен из файла cookie).

u = session[:user]
u.add_this lots_of_data

, поэтому в итоге я получил ошибку переполнения файла cookie.

Правильно ли я об этом?Полностью ли сессии хранятся в файлах cookie в Rails 3 (по умолчанию)?

Ответы [ 2 ]

5 голосов
/ 13 сентября 2010

Да, если вы используете хранилище cookie, данные сеанса сохраняются в cookie.Если вы хотите сохранить его на сервере, вам нужно будет использовать другое хранилище сеансов.

Однако, если вы храните объекты модели или "много данных" в сеансе, вы, скорее всего, делаетеэто неправильно в первую очередь.Ваши данные должны идти в базу данных, а сеанс должен содержать столько информации, сколько вам нужно для ее извлечения.

В вашем случае это будет означать сохранение идентификатора пользователя в сеансе и загрузку пользователяиз БД в before_filter.

0 голосов
/ 20 января 2011

Да, вы правы. Проблема может возникнуть, если вы продолжаете добавлять данные в сеанс. Но есть и другие вещи, которые влияют на это.

Однажды у меня возникла ошибка CookieOverflow, и причина была в сообщениях flash [: note].

Если вы используете flash [: note] = "message" и затем перенаправляете, текст "message" будет сохранен в cookie Если размер передаваемого текста превышает 4 КБ, вы получаете ошибку «CookieOverflow»

...