2015-05-08 59 views
2

我在我的ruby项目中使用了sinatra会话。登录后我写会话[:name]用户的名字。 如果用户调用某个API方法,我会验证会话[:名称],如果此值不为空,他将从服务器获得响应。注销后,我清除此值。 我的代码:Ruby和Sinatra会话问题

use Rack::Session::Cookie, :expire_after => 86400 

    get '/login' do 
     session[:name] = params[:username] 
    end 

    get '/logout' do 
     session[:name] = '' 
     return 'done' 
    end 

    error 401 do 
     return '401 Unauthorized' 
    end 

    get '/check_session' do 
     if session[:name].to_s.strip.length == 0 || session[:name].to_s!=params[:username] 
      return 401 
     end 
     return session[:name] 
    end 

此代码效果很好。但是,如果我从一个浏览器(即Google Chrome)登录,然后打开另一个浏览器,即Mozilla FireFox,并拨打电话/check_session,我会从服务器401未授权得到响应。 这是为什么发生? 以及如何解决它?

回答

2

它不是一个错误。每个浏览器都有自己的会话你需要在新的浏览器打开页面后进行登录。

1

这不是一个错误,它是预期的。一个会话只能在和一个浏览器上运行。当您启动Firefox时,您将开始一个新会话。 :)