2013-05-04 178 views
2

我正在開發一個基於session_id的簡單購物車,即確定使用的用戶購物車項目session_id。Rails 3會話和cookie如何堅持會話ID Cookie

但是,當用戶關閉瀏覽器,然後再次打開一個會話ID已被更改。他把所有的物品丟在車裏。

我懷疑這樣的功能,我可以在cookie中保存會話ID

我對不對?

我的問題的任何方式是如何提供一種功能,即使在關閉瀏覽器後用戶也可以獲得購物車物品?

回答

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中添加的項目。 – 2013-05-04 18:19:48

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

瞭解更多詳情,check it out

+0

因此,我必須每次更新我的cookie時,我的控制器會更改會話中的某些內容,或者會自動更新。 – 2013-11-21 15:47:05

5

我推薦閱讀Rails指南:操作控制器概述(http://guides.rubyonrails.org/action_controller_overview.html)。

第4節和第5節介紹了會話和Cookies,並會讓您更深入地瞭解如何使用它們,並且可以輕鬆解決功能難題。

我也想看看on Rails的ActionDispatch紅寶石::餅乾<對象文檔 (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中保留的所有數據(session [:some_key] = some_value)也在cookie中保留在用戶端。另一方面,Rails提供了一種將數據存儲在cookie中的方法,如cookie [:some_key] = some_value。如果我可以將它存儲在session []中,爲什麼要將數據存儲在cookie []中? – 2013-05-04 18:38:39

+0

一些Rails應用程序不使用會話,但他們仍然可能想要在用戶瀏覽器中存儲一些信息,這就是cookie方法存在的原因。 – halmeetdave 2013-05-04 19:12:27