2012-11-08 2 views
7

Ich arbeite mit session[:hash_name] in Ruby on Rails, um Sitzungsinformationen wie Benutzername und Zeug zu halten.Sitzung schließen und umleiten, um sich in Ruby on Rails anzumelden

Ich versuche eine Möglichkeit zu finden, diese Sitzung ablaufen zu lassen, ohne dass sich der Benutzer abmelden muss. Besonders in zwei Fällen: Nach einiger Zeit muss es ablaufen und wenn der Benutzer den Browser schließt.

Bisher habe ich another Parameter namens cookies[:hash_name] gefunden, die nach einiger Zeit ablaufen kann. Aber ich bin mir nicht sicher, wie man diesen Parameter in jeder Benutzeranforderung überprüft und dann reset_session aufruft. Wenn die Sitzung zurückgesetzt wird, muss ich den Benutzer auf die Anmeldeseite umleiten.

Jeder Vorschlag, diese 2 Probleme zu lösen, wird sehr geschätzt.

Antwort

5

können Sie speichern die Sitzung in einem Cookie, das ein Session-Cookie standardmäßig ist (was bedeutet, es geht weg, wenn der Benutzer den Browser schließt) und eine Ablaufzeit mit :expire_after hinzufügen.

Dies kann in config/initializers/session_store.rb konfiguriert werden. Zum Beispiel:

1

Nun, ich bin mir ziemlich sicher, dass wenn Sie session.delete(:hash_name) ausführen, die Sitzung zu zerstören, jedoch ist es sehr zu empfehlen, dass Sie nicht versuchen, Ihr eigenes Authentifizierungssystem zu erstellen, vor allem wenn es Stunden dauern wird, um die grundlegendsten Funktionen zu erstellen , während eine vorgefertigte Lösung in 20 Minuten installiert werden konnte. Nicht nur das, aber die vorgefertigte Lösung ist wahrscheinlich doppelt so sicher wie alles, was Sie selbst kochen können, weil es von unzähligen Entwicklern getestet und getestet wurde.

Ich würde empfehlen, Gerät für die Authentifizierung zu verwenden. Mit Gerät erhalten Sie Methoden wie sign_out(current_user), die offensichtlich den Benutzer abmeldet, der die Anfrage gestellt hat. Werfen Sie einen Blick auf devise's github page

Alles was es braucht ist gem install devise, fügen Sie sie gemfile, und führen Sie dann

rails g devise:install User # or whatever model name

Und sie behandeln den Rest

+0

Vielen Dank, ich werde die Option der Verwendung von Devise erkunden, aber für den Moment brauchte ich einen einfachen Session-Controller, der nach einiger Zeit abläuft. Antwort, die ich von "Old Pro" erhalten habe – marimaf

0

Ich denke, Sie Ihre eigenen verwenden Authentifizierungsmethode. Also, für scenario1 (dh auslaufenden Sitzung nach einigen Malen), Sie gegeben tun können, etwas Ähnliches wie unten:

def create_session 
    if session[:hash_key] 
    destroy_session if session[:last_login] < 10.minutes.ago 
    session[:last_login] = Time.now 
    else 
    ... authenticate 
    session[:last_login] = Time.now 
    end 
end 

def destroy_session 
    reset_session 
end 

Für Szenarios2 (dh auf Browser schließen), können Sie verwenden jquery Event-Handler aufrufen und kann wie etwas tun unten:

$('window').unload(function(){ 
    //call to destroy session method 
});