Search code examples
sessionsinatrashotgun

Shotgun gets new sessions every time, can't store data in sessions


This is an example from a book, a bit modified. It seems like sessions don't work. Every time I get a new session.

#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>

I'm using

  • ruby 1.9.2
  • sinatra 1.3.2
  • shotgun -s thin -p 4567 - how I start server

I just can't understand why sessions don't save data?


Solution

  • Why did you comment

    set :session_secret, "something"
    

    in your examples? If you use shotgun for reloading server it can help you.