Shotgun每次都会获得新的会话,无法在会话中存储数据

时间:2012-03-22 17:13:03

标签: session sinatra 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>

我正在使用

  • ruby​​ 1.9.2
  • sinatra 1.3.2
  • shotgun -s thin -p 4567 - 我如何启动服务器

我无法理解为什么会话不能保存数据?

1 个答案:

答案 0 :(得分:5)

你为什么评论

set :session_secret, "something"

在你的例子中? 如果您使用霰弹枪重新加载服务器,它可以帮助您。