2012-01-06 43 views
1

我使用的轨道会话使用默认cookie存储,而我访问会话对象,并使用Rails的会议更好地了解

session[:my_var] = 'abc' 

读/写变量,我可以在我的应用程序加载一个行动,这设置这个会话变量,并在我的浏览器中查看我的“_appname_session”cookie。查看这个cookie在轨控制台的内容,通过

Marshal.load(Base64.decode64(CGI.unescape("[paste cookie here]".split("\n").join).split('--').first)) 

我看到

{:session_id=>"[some long key]", :my_var=> 'abc'} 

都很好。

如果我加载其他行动,其中包含的代码

session[:another_var] = 'abc' 

我再次解码的cookie,但这次看到

{:session_id=>"[a different key]", :another_var=> 'abc'} 

所以我的问题是,为什么我会看到不同的值for:session_id,并且会话对象/ cookie中的my_var在哪里有?

另外 - 我已经使用Active Record Store尝试了这个例子,现在在我的数据库中看到相同的结果,显示为会话表中的新行。

非常感谢!

+0

相同的浏览器?同一浏览器窗口?哪个浏览器? – 2012-01-06 16:21:23

+0

你确定会话没有被清理到某个地方,比如隐藏在ApplicationController before_filter中吗? – 2012-01-06 16:21:29

+0

我认为你需要展示更多的代码。这是非标准的行为,所以其他的东西一定是干涉的。 – 2012-01-06 16:59:23

回答

-2

session[:my_var]session[:another_var]没有一个会话有两个变量,但两个不同的会话。

我想你想通过散列做的是使一个会话并分配变量,它是什么:

session[:my_session] = {:my_var => "abc", :another_var => "abc"} 

the "What are Sessions?" section in the Rails guides for more details

+0

我认为问题是目前还不清楚*为什么有两个会话。 'session [:my_var]'和'session [:another_var]'*应该*是同一个会话,如果它是同一个浏览器/同一个tab /同一个用户(如果有登录)。会话是单个会话的*会话。 – 2012-01-06 16:33:26

+0

是的,这就是我的意思。为什么“会话”在请求中表现为两个不同的对象? – casaram 2012-01-06 16:40:05

+0

现在我明白了,对不起! – 2012-01-06 16:50:56