2010-11-23 8 views

Antwort

43

Verwenden Sie einfach

session.clear 

die Sitzung zu zerstören.

+0

Aus dem OP-Beispiel ist es klar ('enable: sessions'), dass sie Sinatra oder ein ähnliches Ruby-Framework verwenden, aber sie haben direkt über' Rack :: Session :: Cookie' nach dem Löschen der Sitzung gefragt. Gilt die in dieser Antwort beschriebene Lösung oder ist Sinatra/Rails spezifisch? Laut http://stackoverflow.com/questions/10451392/how-do-i-set-get-session-vars-in-a-rack-app '# session' ist eine Methode spezifisch für Sinatra/Rails/.. und Plain-Rack-Anwendungen haben es nicht. Wenn das wahr ist, weiß dann jemand, was ist die richtige Rack-only-Möglichkeit, damit umzugehen? –

+0

funktioniert nicht für mich, versuchte es ein paar Mal. Ich habe eine sehr einfache App mit 'enable: sessions' –

+0

@jj_ Nope,' sinatra' und 'rails' verwenden Rack-Middleware. –

3

Es hängt davon ab, wie Sie Ihre Sitzung erstellen. Sie müssen lediglich den Sitzungseintrag löschen. Hier ist ein einfaches Beispiel, wie man Sitzungen erstellt und zerstört.

get '/login' do 
    session[:username] = params[:username] 
    "logged in as #{session[:username]}" 
    end 

    get '/logout' do 
    old_user = session[:username] 
    session[:username] = nil 
    "logged out #{old_user}" 
    end 

Sie können auch dieses Beispiel überprüfen: https://gist.github.com/131401

+2

Hmm, das habe ich probiert, aber der rack.session cookie existiert noch, nachdem ich mich "ausgeloggt" habe. – ecoffey

+0

@ecoffey Sind Sie sicher, es ist der gleiche Cookie? Wenn Sie 'session.clear' verwenden, wird es wahrscheinlich eine neue Sitzung sein, aber die alte wurde zerstört. Nil-Session-Schlüssel können den ursprünglichen Cookie behalten, aber keinen Wert haben. – xentek

Verwandte Themen