2012-03-22 11 views
0

これは本の一例です。セッションがうまくいかないようです。毎回私は新しいセッションを得る。Shotgunは毎回新しいセッションを取得し、セッションにデータを保存することはできません

#reporter.rb 

    require 'sinatra/base' 

    class LoginScreen < Sinatra::Base 

     #configure(:development) { set :session_secret, "something" } 

     enable :sessions 

     get('/login') { erb :login } 

     post('/login') do 
     if params[:user][:login] == 'admin' && params[:user][:password] == 'admin' 
      session['user_name'] = params[:user][:login] 
      redirect '/' 
     else 
      session[:notice] = "notice!" 
      redirect '/login' 
     end 
     end 
    end 

    class Reporter < Sinatra::Base 
     # "прослойка" будет запущена перед фильтрами 
     # enable :sessions 
     # use Rack::Session::Pool, :expire_after => 2592000 
     #configure(:development) { set :session_secret, "something" } 
     use LoginScreen 

     before do 
     unless session[:user_name] 
      halt "Access denied, please <a href='/login'>login</a>." 
     end 
     end 

     get('/') { "Hello #{session['user_name']}." } 
    end 

config.ru

require './reporter' 
run Reporter 

login.erb

<h1>Main User</h1> 
    <h1>Welccome to reporter</h1> 
    <p>You must log in with your credentials or as "newcomer" </p> 

    <form action="/login" method="post" id="user"> 
     <p> 
      <label>login:</label><br /> 
      <input type="text" name="user[login]" id="login" /> 
     </p> 

     <p> 
      <label>Password:</label><br /> 
      <input type="text" name="user[password]" id="password" /> 
     </p> 

     <p> 
      <input type="submit" value="Log in"> 
     </p> 
    </form> 

私が使用している

  • ルビー1.9.2
  • シナトラ1.3.2
  • shotgun -s thin -p 4567 - 私はセッションがデータを保存しない理由を私は理解できないサーバー

を開始どのように?

答えて

5

なぜあなたはあなたの例で

set :session_secret, "something" 

コメントしましたか? サーバーをリロードするためにショットガンを使用すると、あなたを助けることができます。

+0

ありがとうございます!それは助けになった。なぜか分からないけど、最初にその行を追加してもそれは助けにならなかったので、私はそれをコメントアウトしました。しかし、ここで私のコードではなくショットガンで問題が発生したようです。今すべては大丈夫です。 ) – user1136228

関連する問題