会话值不会保留

时间:2012-10-13 22:18:53

标签: session sinatra jruby trinidad-gem

我在Trinidad服务器上使用JRuby(最新的,1.7 RC2)/ Sinatra混合,以获取背景信息。

get "/" do
    @user = session[:user] || [3,2]
    puts session[:user]
    haml :home
end

get "/signed_in" do
    "#{session[:loggedin]}"
end

post "/signup" do
    user = User.create(:username => params[:username], :password => Digest::SHA1.hexdigest(params[:password]))
    session[:user] = user
    session[:loggedin] = true
    puts session[:user]
end'

我期望的输出是(带注释):

# blank line
#<User:0x4049839a>
#<User:0x4049839a>

但我真正得到的是:

# blank line
#<User:0x4049839a>
# blank line

在帖子之后,/signed_in仍然没有输出值,当它真的应该是true时。

为什么不保留这些价值?不,我没有使用霰弹枪,我确实启用了会话,而且我确实设置了会话密钥。

1 个答案:

答案 0 :(得分:1)

您无法将DataMapper资源保留在会话变量中。而是将密钥放入会话变量中的用户对象,并使用before帮助程序设置@user = User.first(session[:user])并在整个应用程序中使用@user实例变量

此外,您不需要session[:loggedin]条目,只需使用@user.nil?

即可