Sinatra没有传递会话变量?

时间:2012-07-12 06:27:29

标签: ruby 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

在/ main中,puts打印出一个空会话[:username]。 有任何想法吗?据我所知,我理解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

它仍然不起作用?

1 个答案:

答案 0 :(得分:1)

它工作得很好 - 看看你的应用程序输出到控制台。它只是没有做你期望的。 puts写入stdout,而不是浏览器。使用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