2013-08-20 13 views
6

Non riesco a trovare esempi semplici per l'utilizzo di Rack::Session::Cookie e vorrei poter memorizzare le informazioni in un cookie e accedervi in ​​seguito a richieste e farlo scadere.Esistono esempi di base di utilizzo di Rack :: Session :: Cookie?

Questi sono gli unici esempi sono stato in grado di trovare:

Ecco quello che sto ricevendo:

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

E poi impostazione/recupero:

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

Non riesco a trovare altre guide o esempi per l'installazione di questo. Qualcuno può aiutare?

risposta

2

Hai già impostato il cookie nella tua domanda. Non sono sicuro che tu intenda qualcos'altro con "setup".

Invece di env['rack.session'] è possibile utilizzare session[KEY] per semplificazione.

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

semplice esempio Sinatra

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

Aggiornamento

credo che non stava lavorando per voi, perché voi avevate impostato dominio non valido. Quindi ho dovuto togliere quello :domain => 'foo.com',. BTW Sinatra avvolge il cookie Rack ed espone l'helper session. Quindi sopra il codice ha funzionato bene per me. Credo che il seguente codice dovrebbe funzionare come previsto.

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 
  • valore impostato sessione msg accesso root o / default 'non impostato' se si passa ?msg=someSTring dovrebbe impostare msg con nuovo valore.
  • accesso /sess per controllare che cosa è in sessione.

Si può prendere alcuni spunti da How do I set/get session vars in a Rack app?

+0

Il problema che ho scoperto con questo è se ricomincio il servizio Web, la sessione è morto, e la sessione set non viene salvato nel cookie. Quindi se premi '/', riavvia sinatra, quindi premi/sess, non restituirai alcuna informazione. – Dishcandanty

+1

Nota che il codice sopra riportato è per ** Sinatra ** ed è leggermente diverso dallo snippet di codice che hai postato ma fondamentalmente avvolge i cookie di Rack internamente AFAIK. Non ho lavorato direttamente su Rack, quindi ho dovuto dedicare del tempo a capirlo. Si prega di fare riferimento alla risposta aggiornata sopra. – ch4nd4n

+0

Penso che dovresti chiarire la differenza tra 'env [" rack.session "] [: msg]' e 'request.session [" msg "]'. –

Problemi correlati