2009-09-20 53 views
0

當有人訪問my train schedule site時,他輸入「from station」,「to station」,然後提交表單以獲取計劃。如何在會話中存儲簡單的用戶首選項

我希望網站在下次訪問該網站時記住用戶上/從站的最後選擇。這是我目前的策略:

在我index行動(對應到根網址的動作):

def index 
    to_station = "Grand Central Terminal" 
    from_station = "" 

    if session[:from_station] 
    from_station = session[:from_station] 
    end 
    if session[:to_station] 
    to_station = session[:to_station] 
    end 

    @schedule = Schedule.new(:to_station => to_station, :from_station => from_station) 
end 

在我show動作(動作,顯示實際列車時刻表):

def show 
    @schedule = Schedule.new(params[:schedule]) 

    if @schedule.trains 
    session[:from_station] = @schedule.from_station 
    session[:to_station] = @schedule.to_station 
    render :partial => 'table', :locals => { :schedule => @schedule } 
    else 
    render :partial => 'error', :locals => { :schedule => @schedule } 
    end 
end 

在我ApplicationController

session :session_expires => 1.year.from_now 

這是正確的方法嗎?尤其是,session :session_expires => 1.year.from_now是「正確」的方式來使會話(以及延長用戶選擇的電臺)持續「長時間」嗎?

+0

你怎麼得到按鈕來改變顏色? – Gutzofter 2009-09-21 03:09:46

+0

@Gutzofter - 我不確定你的意思是 – 2009-09-21 03:30:17

+0

你使用懸停在你的CSS文件? – Gutzofter 2009-09-22 00:42:36

回答

3

你應該使用cookies

cookies[:<name>] = { :value => "<value>", :expires => <time of expiry>} 

第一個原因是,在會話存儲數據意味着數據存儲在上你的服務器的內存中。最後,如果你將這些數據保存在內存中的時間很長,你的內存將會變得更大,因此你的內存將會充滿。

第二個原因是如果你需要重新啓動你的服務器(或者某些需要apache/iis/ror /虛擬主機服務重啓)會話數據將被清除。會話通常用於短期數據存儲。

現在有SqlSessionStores(例如http://railsexpress.de/blog/articles/2005/12/19/roll-your-own-sql-session-store)這樣的東西,所以你可以存儲你的會話數據更長的時間,沒有服務器內存的限制,沒有限制丟失所有會話數據,如果你重新啓動服務器。不過要注意的是,這些仍然是爲短期儲存設計的,我不會將它們用於長期儲存。

Cookie - 直到用戶在瀏覽器中清除cookie或直到cookie過期爲止。長期非關鍵存儲

會話 - 保留直到用戶在瀏覽器中清除cookie(cookie用於跟蹤用戶並識別其會話),或者web服務/服務器重新啓動或會話過期;短期非關鍵存儲

SqlSession - 保留直到用戶在瀏覽器中清除cookie或會話過期;短期非關鍵存儲

+0

默認情況下,會話存儲在客戶端Cookie中,不是嗎? – 2009-09-20 21:40:45

+0

這是真的,但是如果你曾經改變過你的sesion商店,你必須回去記住'修復'該代碼使用cookies。就我個人而言,如果我爲了某個特定的原因而做這件事,我喜歡明確自己在做什麼,因此我使用了Cookie []。 – 2009-09-20 21:54:39

+0

我想我認爲會話是對cookie的抽象,除非你試圖做一些「非標準」的東西,否則你將永遠不需要使用cookie。如果兩者之間存在功能差異,我想知道爲什麼cookie只允許您存儲字符串? – 2009-09-20 23:03:50

相關問題