如何使用sinatra会话

che*_*nge 9 ruby sinatra

enable :sessions
get '/foo' do
  session['m'] = 'Hello World!'
  redirect '/bar'
end

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

end
Run Code Online (Sandbox Code Playgroud)

它似乎不起作用.

Kon*_*ase 15

你在用霰弹枪吗?如果是这样,请执行以下操作:

configure(:development) { set :session_secret, "something" }
Run Code Online (Sandbox Code Playgroud)

在Sinatra 1.3中不再需要这样做.


Phr*_*ogz 12

也许您在网络浏览器上禁用了cookie?Sinatra的会话默认使用cookie.

这是我的测试应用程序:

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
Run Code Online (Sandbox Code Playgroud)

在这里,它正在行动:

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...
Run Code Online (Sandbox Code Playgroud)

如果没有cookie,您的重定向将会起作用,但它将在重定向之后成为一个全新的会话,会话从头开始.