2013-08-20 57 views
6

Rack::Session::Cookie'u kullanmayla ilgili basit örnekler bulamıyorum ve bilgileri bir çerezde saklamak ve daha sonraki isteklerinize erişmek ve süresinin dolmasını sağlamak istiyorum. SonraRack :: Session :: Cookie kullanımı için temel herhangi bir örnek var mı?

use Rack::Session::Cookie, :key => 'rack.session', 
           :domain => 'foo.com', 
           :path => '/', 
           :expire_after => 2592000, 
           :secret => 'change_me' 

Ve:

alıyorum ne:

Bunlar

bulmayı başardık yalnızca örnektir ayarlama/alma:

env['rack.session'][:msg]="Hello Rack" 

Bunun için başka kılavuz veya örnek bulamıyorum. Birisi yardım edebilir mi?

cevap

2

Sorunuza zaten çerez yerleştirdiniz. "Kurulum" ile başka bir şey ifade edeceğinizden emin değilim.

env['rack.session'] Yerine basitleştirme için session[KEY] kullanabilirsiniz.

session[:key] = "vaue" # will set the value 
session[:key] # will return the value 

Basit Sinatra örneği

require 'sinatra' 
set :sessions, true 
get '/' do 
    session[:key_set] = "set" 
    "Hello" 
end 
get "/sess" do 
    session[:key_set] 
end 

Güncelleme

Ben geçersiz etki alanını ayarlamak çünkü bu sizin için çalışma değildi inanıyoruz. Bu yüzden onu :domain => 'foo.com','dan çıkarmak zorunda kaldım. BTW Sinatra Rack çerezini sarar ve session yardımcısını sunar. Yani yukarıda kod benim için iyi çalıştı. Aşağıdaki kodun beklendiği gibi çalışması gerektiğine inanıyorum.

require 'sinatra' 
use Rack::Session::Cookie, :key => 'rack.session', 
    :expire_after => 2592000, 
    :secret => 'change_me' 
get '/' do 
    msg = params["msg"] || "not set" 
    env["rack.session"][:msg] = msg 
    "Hello" 
end 
get "/sess" do 
    request.session["msg"] 
end 
  • ayar oturumu değeri msg erişim kök ya da bunu yeni bir değerle msj belirlesin ?msg=someSTring geçerse 'belirtilmedi' için / varsayılan. Oturumda ne olduğunu görmek için
  • erişim /sess.

Sen Aşağıdaki örnek How do I set/get session vars in a Rack app?

+0

Bununla keşfettim Sorunum Web Service yeniden eğer, oturum öldü ve set Oturum çerezinize kaydedilen değil mi. Yani '/' tuşuna basarsanız, sinatrayı yeniden başlatır, sonra/sessize basarsanız, herhangi bir bilgi vermezsiniz. – Dishcandanty

+1

Yukarıdaki kodun ** Sinatra ** için olduğunu ve posta kod snippet'inden biraz farklı olduğunu unutmayın, ancak temelde Rack Cookie'yi dahili olarak AFAIK olarak sarar. Raf üzerinde doğrudan çalışmadım bu yüzden bunu anlamak için biraz zaman harcamak zorunda kaldım. Lütfen yukarıdaki güncellenmiş cevaba bakın. – ch4nd4n

+0

Sanırım env ['rack.session'] [: msg] 've' request.session ['msg'] 'arasındaki farkı açıklığa kavuşturmalısınız. –