2012-07-12 118 views
1

我有以下代码:Sinatra没有传递会话变量?

enable :sessions 
class CSFSWC < Sinatra::Application 

post '/login' do 

    username = params[:username] 
    password = params[:password] 

if csfsss.authenticate(username,password) == false 
    redirect '/' 
    # session[:loginsession] = nil 
else 
    # Start session here 
    session[:username] = params[:username] 
    @sessionID = session[:username] 
    puts "Session : #{@sessionID}" 
    redirect '/main' 
end 

get '/main' do 
puts "main session : #{@sessionID}" 
end 

/主看跌期权打印出一个空会话[:用户名]。 有什么建议吗?据我了解Sinatra的会议根据:Sinatra Sessions

它应该只是工作。

其实即使我复制从Sinatra Sessions

class CSFSWC < Sinatra::Base 
    enable :sessions 

    get '/foo' do 
    session[:message] = 'Hello World!' 
    puts "foo : #{session[:message]}" 
    redirect '/bar' 
    end 

    get '/bar' do 
    puts "bar : #{session[:message]}" 
    end 

它仍然无法正常工作的例子吗?

+0

我敢肯定,实例变量在下一个(重定向)请求中不可用。尝试在'get'/ main''内访问'session [:username]' – 2012-07-12 06:30:38

+0

同样的问题将“main session:#{session [:username]}”放在/ main – daemonza 2012-07-12 06:50:18

回答

1

它工作得很好 - 看你的应用程序的输出到控制台。这只是没有达到你的期望。 puts写入标准输出,而不是浏览器。使用Sinatra,您返回的最后一个字符串是发送给浏览器的内容。这是你想要的:

class CSFSWC < Sinatra::Base 
    enable :sessions 

    get '/foo' do 
    session[:message] = 'Hello World!' 
    # This just writes it to your log 
    puts "foo : #{session[:message]}" 
    redirect '/bar' 
    end 

    get '/bar' do 
    "bar : #{session[:message]}" 
    end 
end