1

我有以下代码:

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 打印出一个空的 session[: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

它仍然不起作用?

4

1 回答 1

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
于 2012-07-13T13:49:25.637 回答