Rails - 会话信息被清除?

时间:2010-05-18 13:34:10

标签: ruby-on-rails session

我有一个奇怪的问题,我无法追查...... 对于上下文,我有用户,注册表和Giftlines的资源。每个用户都有许多注册表。每个注册表都有许多礼品。它以相反的方式属于他们的关联。

基本上发生的是,当我创建礼品线时,礼品线本身已正确创建,并正确链接到其关联的注册表,但在重定向回注册表显示页面的过程中,{{ 1}}变量被清除,我已经注销了。

据我所知,出现问题的地方在于registries_controller:

session[:user_id]

现在,要清楚,我可以正常显示注册表,并且没有任何奇怪的事情发生。只有当我添加礼品线时, def show @registry = Registry.find(params[:id]) @user = User.find(@registry.user_id) if (params[:user_id] && (@user.login != params[:user_id]) ) flash[:notice] = "User #{params[:user_id]} does not have such a registry." redirect_to user_registries_path(session[:user_id]) end end 变量才会被清除。

我使用了调试器,这似乎正在发生。

session[:user_id]

从那里我们可以看到代码在添加项目后返回到show命令,并且(rdb:19) list [20, 29] in /Users/kriston/Dropbox/ruby_apps/bee_registered/app/controllers/registries_controller.rb 20 render :action => 'new' 21 end 22 end 23 24 def show => 25 @registry = Registry.find(params[:id]) 26 @user = User.find(@registry.user_id) 27 if (params[:user_id] && (@user.login != params[:user_id]) ) 28 flash[:notice] = "User #{params[:user_id]} does not have such a registry." 29 redirect_to user_registries_path(session[:user_id]) (rdb:19) session[:user_id] "tester" (rdb:19) 变量仍然设置。

session[:user_id]

踩到,我们到了这一步。 并且(rdb:19) list [22, 31] in /Users/kriston/Dropbox/ruby_apps/bee_registered/app/controllers/registries_controller.rb 22 end 23 24 def show 25 @registry = Registry.find(params[:id]) 26 @user = User.find(@registry.user_id) => 27 if (params[:user_id] && (@user.login != params[:user_id]) ) 28 flash[:notice] = "User #{params[:user_id]} does not have such a registry." 29 redirect_to user_registries_path(session[:user_id]) 30 end 31 end (rdb:19) session[:user_id] "tester" (rdb:19) 仍然设置。 此时,网址格式为session[:user_id],因此localhost:3000/registries/:id失败,并且params[:user_id]条件不会发生。 (除非我完全错了>。<)

然后出现下一位,即

if

然后当我点击下一个......

(rdb:19) list
[1327, 1336] in /Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/base.rb
   1327        end
   1328  
   1329        def perform_action
   1330          if action_methods.include?(action_name)
   1331            send(action_name)
=> 1332            default_render unless performed?
   1333          elsif respond_to? :method_missing
   1334            method_missing action_name
   1335            default_render unless performed?
   1336          else
(rdb:19) session[:user_id]
"tester"

(rdb:19) next 2: session[:user_id] = /Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/filters.rb:618 return index if nesting != 0 || aborted (rdb:19) list [613, 622] in /Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/filters.rb 613 private 614 def call_filters(chain, index, nesting) 615 index = run_before_filters(chain, index, nesting) 616 aborted = @before_filter_chain_aborted 617 perform_action_without_filters unless performed? || aborted => 618 return index if nesting != 0 || aborted 619 run_after_filters(chain, index) 620 end 621 622 def run_before_filters(chain, index, nesting) (rdb:19) session {:user_id=>nil, :session_id=>"49992cdf2ddc708b441807f998af7ddc", :return_to=>"/registries", "flash"=>{}, :_csrf_token=>"xMDI0oDaOgbzhQhDG7EqOlGlxwIhHlB6c71fWgOIKcs="} 已清除,当页面呈现时,我已注销。 >。<

Sooo ....知道为什么会这样吗? 我刚才想到,我不确定我是不是要在这里粘贴大量的调试输出...如果我不打算这样做,有人会指出我。 >>

是的,这只发生在我添加了giftitem时,它会将我发送回注册表页面。当我查看它时,会出现相同的代码,但session[:user_id]变量未被清除。 这让我有点疯狂。

谢谢!

- 编辑:添加了会话控制器代码 -

这是会话控制器代码。

session[:user_id]

除了“注销”链接外,其他任何地方都不会调用destroy。

1 个答案:

答案 0 :(得分:0)

当您说退出时,您的意思是您的会话用户被清除了吗?您发布了很多诊断信息,这很好,但您没有公开会话管理的方式。

@user和“登录用户”是否可能是同一个变量?如果是这样,它可能会被替换。

通常最好将一个标识为@session_user,并将@user保留为更通用的变量。