How to use sinatra session

前端 未结 2 1155
野的像风
野的像风 2021-02-08 20:50
enable :sessions
get \'/foo\' do
  session[\'m\'] = \'Hello World!\'
  redirect \'/bar\'
end

get \'/bar\' do
  session[\'m\']   # => \'Hello World!\'

end

相关标签:
2条回答
  • 2021-02-08 20:58

    Perhaps you have cookies disabled on your web browser? Sinatra's sessions use cookies by default.

    Here's my test app:

    require 'sinatra'
    enable :sessions
    get '/foo' do
      session['m'] = 'Hello World!'
      redirect '/bar'
    end
    get '/bar' do
      <<-ENDRESPONSE
        Ruby:    #{RUBY_VERSION}
        Rack:    #{Rack::VERSION}
        Sinatra: #{Sinatra::VERSION}
        #{session['m'].inspect}
      ENDRESPONSE
    end
    

    And here it is in action:

    phrogz$ curl --cookie-jar cookies.txt -L http://localhost:4567/foo
        Ruby:    1.9.2
        Rack:    [1, 1]
        Sinatra: 1.2.3
        "Hello World!"
    
    phrogz$ curl -L http://localhost:4567/foo
        Ruby:    1.9.2
        Rack:    [1, 1]
        Sinatra: 1.2.3
        nil
    
    phrogz$ cat cookies.txt 
    # Netscape HTTP Cookie File
    # http://curl.haxx.se/rfc/cookie_spec.html
    # This file was generated by libcurl! Edit at your own risk.
    
    localhost   FALSE   /   FALSE   0   rack.session    BAh7BkkiBm0GOgZFRkkiEUhl...
    

    Without cookies, your redirect will work but it will be as though it's a brand new session after the redirect, with the session starting from scratch.

    0 讨论(0)
  • 2021-02-08 21:13

    Are you using shotgun? If so, do the following:

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

    This will no longer be necessary in Sinatra 1.3.

    0 讨论(0)
提交回复
热议问题