2013-05-04 7 views
2

Я разрабатываю простую корзину покупок на основе session_id для определения элементов пользовательской корзины, используемых session_id.Rails 3 session & cookie Как сохранить сеанс id cookie

Но когда пользователь закрывает браузер и затем снова открывает его, то идентификатор сеанса связи был изменен. И он теряет все свои вещи в корзине.

Я подозреваю, что такую ​​функцию я могу предоставить с сохранением session id в cookie.

Я прав?

В любом случае, мой вопрос: Как обеспечить функциональность, позволяющую пользователям получать свои товары даже после закрытия браузера?

ответ

2

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

Файлы cookie НЕ используются совместно между браузерами. Когда-либо.

Если вы хотите использовать Opera для просмотра корзины покупок, которую вы только что создали в Firefox, вам необходимо пройти аутентификацию в магазине, например, с именем пользователя и паролем.

См. Rails 3 additional session configuration options (key, expires_after, secure) для описания всех параметров конфигурации для вашей сессии.

вы будете хотеть, чтобы посмотреть на: expire_after, например

:expire_after => 24.hours 

(Найдено здесь: Setting session timeout in Rails 3)

+0

Спасибо, его ясно. Но я не работаю для разных браузеров. Например, я добавил некоторые вещи в корзину в Firefox, затем я закрыл Firefox и открыл Opera. К сожалению, в Opera я не вижу элементов, добавленных в Firefox. –

3
cookies[:your_cookie] = { 
    :value => "your_cookie_value", 
    :expires => 100.years.from_now 
} 

для получения более подробной информации, check it out.

+0

Итак ... Я должен обновлять свой файл cookie каждый раз, когда мой контроллер меняет что-то, что идет на сеанс, или это происходит автоматически? –

5

Рекомендую прочитать руководство по Rails: обзор контроллера действия (http://guides.rubyonrails.org/action_controller_overview.html).

Разделы 4 и 5 охватывают сессии и файлы cookie и дадут вам более глубокое понимание о том, как их использовать и облегчит решение проблем с функциями.

Я хотел бы также проверить Ruby On Rails ActionDispatch :: Cookies Документация < Объект (http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html)

Пример кода контроллера вы ищете перечислен на этом ресурсе. Вот пример:

# Sets a cookie that expires in 1 hour. 
cookies[:login] = { :value => "XJ-122", :expires => 1.hour.from_now } 
+0

Я смущен. С одной стороны по умолчанию все данные, которые я сохраняю в сеансе (session [: some_key] = some_value), также сохраняются на стороне пользователя в файлах cookie. С другой стороны Rails представляет способ хранения данных в cookie как cookie [: some_key] = some_value. Зачем хранить данные в файле cookie [], если я могу сохранить его в сеансе []? –

+0

Некоторые приложения Rails не используют сеансы, но они все равно могут хранить некоторую информацию в браузере пользователей, поэтому методы cookie существуют. – halmeetdave

Смежные вопросы