2011-04-12 6 views
10

어떤 이유로 세션 변수가 내 앱에서 설정되지 않습니다. Sinatra 1.2.1을 사용하고 있습니다. 각 요청 후Sinatra 및 세션 변수가 설정되지 않음

module GitWiki 
    class App < Sinatra::Base 

    configure do 
     enable :sessions 

     set :app_file, __FILE__ 
     set :root, File.expand_path(File.join(File.dirname(__FILE__), '..', '..')) 

     set :auth do |bool| 
     condition do 
      redirect '/login' unless logged_in? 
     end 
     end 
    end 

    helpers do 
     def logged_in? 
     not @user.nil? 
     end 
    end 

    error PageNotFound do 
     page = request.env["sinatra.error"].name 
     redirect "/#{page}/edit" 
    end 

    before do 
     content_type "text/html", :charset => "utf-8" 
     @user = session[:user] 
    end 

    get "/login/?" do 
     erb :login 
    end 

    post "/login" do 
     user = User.get 
     if user.authenticate(params[:username], params[:password]) 
     session[:user] = params[:username] 
     p session # => {:user=>"root"} 
     else 
     # AZIZ! LIGHT! 
     end 

     redirect '/' 
    end 

    get "/" do 
     p session # => {} 
     redirect "/" + GitWiki.homepage 
    end 

    # ... 
    end 
end 

당신이 볼 수 있듯이, session[:user]가 설정되지 않는, 또는 오히려 세션 해시되고있는 리셋 : 여기

은 코드의 조각이다. 아무도 무슨 일이 일어나고 있는지 알아?

답변

26

당신이 샷건을 사용하는 경우 구성 블록에 다음 줄을 추가 :

set :session_secret, "My session secret" 

이 RKH에서 인용하자면,시나의 현재 메인테이너 :

[샷건]에 서버를 다시 시작합니다 모든 요청은 세션 비밀을 다시 생성하여 세션을 무효화합니다. 이것은 현재 마스터에서 수정되었습니다. 간단한 수정 : session_secret 옵션을 설정하십시오.

참고 : 당신이시나의 문서에서 Rack::Session::Pool

+0

를 사용하는 경우이 수정 프로그램이 작동하지 않습니다 "그러나이 비밀이 응용 프로그램의 모든 시작에 따라 변화하기 때문에, 당신은을 설정할 수 있습니다 비밀 ... " – imwilsonxu

+0

훨씬 더, 당신에게 아지즈 고맙습니다. – pje

+0

"NOTE"가 마음에 들지만,'Rack :: Session :: Pool'을 누가이 문제를 해결할 수 있는지 알고 싶습니까? –

관련 문제