2013-08-20 18 views
6

Nie mogę znaleźć żadnych prostych przykładów korzystania z usługi Rack::Session::Cookie i chciałbym móc przechowywać informacje w pliku cookie, a także uzyskać do nich dostęp w przypadku późniejszych żądań i wygaśnie.Czy są jakieś podstawowe przykłady użycia Rack :: Session :: Cookie?

Są to tylko przykłady udało mi się znaleźć:

Oto co mi chodzi:

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

A potem ustawienie/odczyt:

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

Nie mogę znaleźć żadnych innych przewodników lub przykładów konfiguracji tego. Czy ktoś może pomóc?

Odpowiedz

2

Już skonfigurowałeś ciasteczko w swoim pytaniu. Nie jestem pewien, czy "coś" oznacza coś innego. Aby uzyskać uproszczenie, można użyć .

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

Prosty przykład Sinatra

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

Aktualizacja

wierzę, że nie działa dla ciebie, bo postawił nieprawidłową domenę. Musiałem więc usunąć to z :domain => 'foo.com',. BTW Sinatra opakowuje ciasteczko Rack i udostępnia pomocnika session. Tak więc powyżej kodu działał dobrze dla mnie. Uważam, że poniższy kod powinien działać zgodnie z oczekiwaniami.

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 
  • zestaw wartość sesja msg korzeń dostępu lub / domyślnie „nie ustawiono” jeśli przejdą ?msg=someSTring należy ustawić wiad z nową wartością.
  • dostęp , aby sprawdzić, co jest w sesji.

Można podjąć pewne sygnały od How do I set/get session vars in a Rack app?

+0

Kwestia I odkryli, ze jest to gdybym ponownie uruchomić usługę internetową, sesja jest martwy, a zestaw sesja nie zostanie zapisana w pliku cookie. Jeśli więc trafisz "/", uruchom ponownie sinatrę, a następnie naciśnij/sess, nie zwrócisz żadnej informacji. – Dishcandanty

+1

Zauważ, że powyższy kod jest dla ** Sinatra ** i różni się nieco od opublikowanego fragmentu kodu, ale w zasadzie to Rack Cookie zawija wewnętrznie AFAIK. Nie pracowałem bezpośrednio nad Rack, więc musiałem poświęcić trochę czasu, aby to zrozumieć. Sprawdź zaktualizowaną odpowiedź powyżej. – ch4nd4n

+0

Myślę, że powinieneś wyjaśnić różnicę między 'env [" rack.session "] [: msg]' i 'request.session [" msg "]'. –

Powiązane problemy