2013-08-20 11 views
6

Ich kann keine einfachen Beispiele für die Verwendung von Rack::Session::Cookie finden und möchte in der Lage sein, Informationen in einem Cookie zu speichern und bei späteren Anfragen darauf zuzugreifen und es ablaufen zu lassen. Gibt es grundlegende Beispiele für die Verwendung von Rack :: Session :: Cookie?

Dies sind die einzigen Beispiele, die ich habe in der Lage gewesen zu finden:

Hier ist, was ich bekomme:

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

Und dann Einstellung/Abruf:

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

Ich kann keine anderen Anleitungen oder Beispiele für die Einrichtung finden. Kann jemand helfen?

Antwort

2

Sie haben bereits einen Cookie in Ihrer Frage eingerichtet. Ich bin mir nicht sicher, ob Sie etwas anderes mit "Setup" meinen.

Anstelle von env['rack.session'] können Sie session[KEY] zur Vereinfachung verwenden.

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

Einfach Sinatra Beispiel

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

aktualisieren

Ich glaube, es ist nicht für Sie gearbeitet, weil Sie ungültige Domain gesetzt hatte. Also musste ich das abziehen :domain => 'foo.com',. BTW Sinatra verpackt Rack-Cookie und stellt session Helfer zur Verfügung. Also oben Code funktionierte gut für mich. Ich glaube, der folgende Code sollte wie erwartet funktionieren.

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 
  • Satz Sitzungswert msg Root-Zugriff oder / standardmäßig auf ‚nicht gesetzt‘, wenn Sie ?msg=someSTring passieren sollte msg mit neuem Wert gesetzt.
  • Zugriff /sess zu überprüfen, was in der Sitzung ist.

Sie können einige Hinweise nehmen von How do I set/get session vars in a Rack app?

+0

Das Problem, das ich mit diesem entdeckt haben, ist, wenn ich die Web-Dienst neu starten, wird die Sitzung ist tot, und der Satz Session wird im Cookie nicht gespeichert. Also, wenn Sie '/' drücken, starten Sie Sinatra, dann drücken Sie/Sess, Sie werden keine Informationen zurückgeben. – Dishcandanty

+1

Beachten Sie, dass der obige Code für ** Sinatra ** ist und sich etwas von dem Code-Snippet unterscheidet, den Sie gepostet haben, aber im Grunde wird Rack Cookie intern mit AFAIK umschlossen. Ich habe nicht direkt an Rack gearbeitet, also musste ich etwas Zeit investieren, um das herauszufinden. Bitte beachten Sie die aktualisierte Antwort oben. – ch4nd4n

+0

Ich denke, Sie sollten den Unterschied zwischen 'env [" rack.session "] [: msg]' und 'request.session [" msg "]' verdeutlichen. –