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 помещается пустая сессия[: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

Он все еще не работает?


person daemonza    schedule 12.07.2012    source источник
comment
я почти уверен, что переменные экземпляра недоступны в следующем (перенаправленном) запросе. попробуйте получить доступ к session[:username] в пределах get '/main'   -  person Marian Theisen    schedule 12.07.2012
comment
Та же проблема с этим ставит основной сеанс: #{session[:username]}in/main   -  person daemonza    schedule 12.07.2012


Ответы (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
person bioneuralnet    schedule 13.07.2012