Значения сессий не сохраняются
Я использую микс 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 ответ
Вы не можете хранить ресурсы DataMapper в переменных сеанса. Вместо этого поместите ключ к своему пользовательскому объекту в переменную сеанса и используйте помощник перед, чтобы установить @user = User.first(session[:user])
и использовать @user
переменная экземпляра во всем приложении
Кроме того, вам не нужно session[:loggedin]
вход, просто используйте @user.nil?