2011-04-17 55 views
8
enable :sessions 
get '/foo' do 
    session['m'] = 'Hello World!' 
    redirect '/bar' 
end 

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

end 

这似乎并没有工作。如何使用西纳特拉会议

+3

它的工作原理。什么是你的红宝石和sinatra版本? – 2011-04-17 13:01:47

回答

10

也许你的cookies在你的网页浏览器禁用? 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 

这里,它是在行动:

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

没有Cookie,您的重定向将工作,但它会好像它是一个全新的会话重定向之后,会话从头开始。

+0

真的很感谢,你的方法真的很酷。原因是我使用猎枪服务器。 – chenge 2011-04-19 20:58:35

+0

@chenge我很高兴这有帮助。如果你觉得这解决了你的问题,你应该接受它作为答案(按答案旁边的复选标记)。如果@康斯坦丁的答案已经解决了您的问题,请将其标记为已接受。 – Phrogz 2011-04-19 21:36:32

+0

有帮助,但不是最终的解决方案。 – chenge 2011-04-20 03:15:09

14

您使用的猎枪?如果是这样,请执行以下操作:

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

这将不再需要在Sinatra 1.3中。

+0

谢谢,是的,我用霰弹枪。你能给一个指导更多的细节? – chenge 2011-04-19 21:02:44

+0

我不得不使用猎枪同样的问题,刚刚升级到西纳特拉-1.2.6和它的作品与猎枪预期。 – Tom 2011-05-15 00:18:41

+0

sinatra 1.3.2 +霰弹枪0.9,仍然需要这个技巧才能工作。 – Neo 2012-05-08 14:10:25