Rails会话丢失一个键:操作之间的值对

时间:2012-05-01 16:33:36

标签: ruby-on-rails session

我有一个确保session[:event_id]存在的before_filter,如果没有,则重定向到select_eventselect_eventchoose_event_by_keycode发送ajax调用。 choose_event_by_keycode然后设置session[:event_id]并重定向到索引。问题是check_event_permissions过滤器在调用时没有session[:event_id]。发生了什么事?

before_filter :check_event_permission, :except => [:select_event, :choose_event_by_keycode]

def check_event_permission
  puts "@!@@@@@@@@@@@@@@@@@@@@@@@"
  puts session
  puts "@!@@@@@@@@@@@@@@@@@@@@@@@"
  redirect_to :action =>'select_event' if !session[:event_id]
end     

def choose_event_by_keycode
  @event = Event.find_by_keyCode(params[:keyCode])
  if @event
    current_user.add_to_event_as_patron(@event.id)
    session[:event_id] = @event.id
    puts "!!@@@@@@@@@@@@@@@@@@@@@@@"
    puts session
    puts "!!@@@@@@@@@@@@@@@@@@@@@@@"
    redirect_to mobile_path
  else
    render 'select_event', :notice => "No event found with that key.", :layout => false
  end
end   

服务器日志(为清晰起见修改了空格,并移动了输出,因此它们按操作顺序显示):

Started GET "/mobile/choose_event_by_keycode?keyCode=12345" for 192.168.5.101 at 2012-05-01 12:29:53 -0400
Processing by MobileController#choose_event_by_keycode as */*
  Parameters: {"keyCode"=>"12345"}
  Event Load (0.1ms)  SELECT `events`.* FROM `events` WHERE `events`.`keyCode` = '12345' LIMIT 1
  User Load (0.1ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
  EventPatron Load (0.0ms)  SELECT `event_patrons`.* FROM `event_patrons` WHERE     `event_patrons`.`user_id` = 1 AND `event_patrons`.`event_id` = 1
!!@@@@@@@@@@@@@@@@@@@@@@@
{"session_id"=>"ea0a0930f7723719d5c29c722ab3d1ed", "_csrf_token"=>"jzhMJcs2lcsGc9LFZi5PhJbGRG1mTrznFeawWHdUOHk=", "user_id"=>1, "user_type"=>"super", "event_id"=>1}
!!@@@@@@@@@@@@@@@@@@@@@@@
Redirected to http://192.168.5.205:3000/mobile
Completed 302 Found in 259ms (ActiveRecord: 6.3ms)


Started GET "/mobile" for 192.168.5.101 at 2012-05-01 12:29:54 -0400
Processing by MobileController#index as */*
@!@@@@@@@@@@@@@@@@@@@@@@@
{"session_id"=>"ea0a0930f7723719d5c29c722ab3d1ed", "_csrf_token"=>"jzhMJcs2lcsGc9LFZi5PhJbGRG1mTrznFeawWHdUOHk=", "user_id"=>1, "user_type"=>"super"}
@!@@@@@@@@@@@@@@@@@@@@@@@
Redirected to http://192.168.5.205:3000/mobile/select_event
Filter chain halted as :check_event_permission rendered or redirected
Completed 302 Found in 1ms (ActiveRecord: 0.0ms)

从日志中可以看到session[:event_id]已成功设置choose_event_by_keycode,但随后在check_event_permission

中消失

更新

我发现了问题。事实证明,只有当您退出并重新登录时才会发生这种情况。在我的退出功能中,我有:

reset_session
session[:user] = nil

不要问我为什么session[:user] = nil就在那里。但是,我删除了,一切正常。 SOOOO,问题现在变为Why did having session[:user] = nil cause the observed behavior?

1 个答案:

答案 0 :(得分:0)

我认为您更改了路线,因此choose_event_by_keycode实际上是GET "/mobile/choose_event?keyCode=12345",因为如果您不是,我们不会向我们展示choose_event。

另外,你的@event也在吗?如果它是空白的或什么......它会在你设置的时候把它搞得一团糟。也许可以在puts @event.id语句中添加puts ...只是为了验证。

/mobile看起来像什么?肯定的是,有些事情并没有增加。

这是你真正的db列名吗? keyCode #curious。