0

这是书中的一个例子,稍作修改。似乎会话不起作用。每次我得到一个新的会话。

#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

配置.ru

require './reporter'
run Reporter

登录.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- 我如何启动服务器

我只是不明白为什么会话不保存数据?

4

1 回答 1

4

你为什么评论

set :session_secret, "something"

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

于 2012-03-26T11:13:10.920 回答