2009-09-20 43 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

相关问题