2013-08-19 19 views
11

Moja aplikacja jest wymagana, aby użytkownicy logowali się na różne konta w oddzielnych zakładkach w przeglądarce (my kierujemy się w szczególności do Chrome). Ponieważ Rails używa plików cookie do przechowywania informacji o sesji, gdy użytkownik jest zalogowany, są oni zalogowani na wszystkich kartach przeglądarki. Używam metody sesji sesji ActiveRecord, ale nawet identyfikator sesji jest zapisywany jako plik cookie.Rails ActiveRecord Session Store w HTML5 SessionStorage Zamiast Cookie

Wygląda na to, że istnieje rozwiązanie wykorzystujące mechanizm sessionStorage HTML5, który jest ograniczony zakresem do karty lub okna, w którym zalogowany jest użytkownik. Wydaje mi się, że wystarczy tylko Railsy, ​​aby zapisać informacje o sesji w sessionStorage zamiast ciasteczek. Ale nie mogę znaleźć żadnych informacji na ten temat.

Zakładając, że nie ma sposobu, aby skonfigurować składnicę sesji do zrobienia tego w Railsach, czy możliwe jest zastąpienie mechanizmu zapisywania sesji ActiveRecord? Jakieś wskazówki, gdzie szukać informacji o tym, jak to zrobić?

+1

Czy znalazłeś odpowiedź na to pytanie? – Marklar

Odpowiedz

-1

Skonfiguruj teraz magazyn sesji oparty na plikach cookie za pomocą inicjalizatora, prawdopodobnie w config/initializers/session_store.rb. W Railsach 3 magazyn sesji jest częścią oprogramowania pośredniego, a opcje konfiguracyjne są przekazywane za pomocą pojedynczego wywołania config.session_store:

Twój :: Application.config.session_store: cookie_store,: key => '_session '

Możesz wstawić dowolne dodatkowe opcje w haszcie za pomocą: klucz, np.

Your::Application.config.session_store :cookie_store, { 
    :key =>   '_session_id', 
    :path =>   '/', 
    :domain =>  nil, 
    :expire_after => nil, 
    :secure =>  false, 
    :httponly =>  true, 
    :cookie_only => true 
} 
+0

Tutaj konfiguruję magazyn sesji i używam magazynu sesji ActiveRecord. Jak to zrobić, aby zapisać w HTMLS sessionStorage zamiast cookie? –

1

W przeciwieństwie do plików cookie, wpisy sessionStorage nie mogą być tworzone z nagłówkami odpowiedzi i nie są automatycznie uwzględniane w nagłówkach żądań. Wiąże się to z dużym nakładem pracy związanym z zarządzaniem uwierzytelnianiem sessionStorage/localStorage po stronie klienta po stronie klienta. Cały uwierzytelniony dostęp musiałby odbywać się za pośrednictwem żądań Javascript XHR, które jawnie zawierają token uwierzytelniania.

Jeśli chcesz, aby użytkownik mógł mieć kilka równoległych sesji, a nie chcesz budować swojej witryny jako SPA, będziesz musiał zastosować alternatywne podejście do plików cookie.

Jednym ze sposobów jest użycie wielu domen do wymuszenia plików cookie na oddzielne podprzestrzeni. Ustaw rekord DNS z wildcard i skonfiguruj swój serwer sieciowy tak, aby akceptował wszystkie pasujące żądania niezależnie od prefiksu. Na przykład domyślnie użytkownicy mogą mieć numer www.yoursite.com. Zapewnisz link "Utwórz nową sesję", który otworzy nową kartę do losowej poddomeny, np. 1234abcd.www.yoursite.com. Może to jednak powodować problemy, jeśli używasz protokołu SSL; Wildcard certyfikaty SSL wydają się być znacznie droższe.

Prostszym sposobem byłoby pouczenie użytkowników o trybach prywatnych/icognito przeglądarek, które utrzymują niezależne magazyny plików cookie. Jednak zachęcanie użytkowników do czytania dokumentacji zawsze stanowi wyzwanie.