在Internet Explorer上发布期间,Sinatra会话丢失

时间:2012-08-31 18:37:53

标签: ruby internet-explorer session sinatra

当我发帖时,其中一个会话变量在IE中丢失。

此网络应用程序可在Chrome和Firefox中完美运行。

这是错误:

NoMethodError at / 

undefined method `include?' for nil:NilClass
file: welcometo.rb
location: xml_file_to_use 
line: 19

以下是错误的方法:

def xml_file_to_use
   groups = allowed_groups
   #Which xml file should I write to
   if (session[:location_group].include? allowed_groups[0] ) <----Line 19
    ......
end

这是一个解释和我的代码:

当用户登录时,会话变量设置为:

#Check to see if the user is authorized
auth_token = Adauth.authenticate(params[:user], params[:password])
if auth_token 
    session[:user] = params[:user]
    session[:first_name] = auth_token.first_name.tr('/"[]', '') 
    session[:location_group] = (auth_token.groups & allowed_groups)
    redirect '/'
else 
    redirect '/login'
end

接下来,我根据这些会话值设置变量:

get '/' do
  if session["user"] != nil
     @first_name = session[:first_name]
     @groups = session[:groups]
     @xml_file = xml_file_to_use 
     @location = location
     erb :form
  else 
    redirect '/login'
  end

end

这部分工作正常。我可以说,因为我在视图中使用了@location变量。

这是位置方法:

#Setup Location Variable
def location
  if (session[:location_group].include? allowed_groups[0] ) <-- This same code errors during a post in IE
     return 'Eagan'
   else
     return 'Chicago'
   end  
end

1 个答案:

答案 0 :(得分:0)

Konstantin Haase是正确的,这一定是个错误。

从他发布的链接中我发现将它放在welcome.rb文件的顶部可以解决问题:

set :protection, except: :session_hijacking