2013-08-19 13 views
11

La mia applicazione ha l'obbligo per gli utenti di accedere a diversi account in schede separate nel proprio browser (ci rivolgiamo specificamente a Chrome). Poiché Rails utilizza i cookie per memorizzare le informazioni sulla sessione, quando l'utente ha effettuato l'accesso, vengono registrati in tutte le schede del browser. Sto utilizzando il metodo di archiviazione di sessione ActiveRecord, ma anche l'ID per la sessione viene salvato come cookie.Rails ActiveRecord Session Store in HTML5 SessionStorage Anziché Cookie

Sembra che ci sia una soluzione nell'utilizzo del meccanismo sessionStorage di HTML5, che è limitato nell'ambito della scheda o della finestra a cui l'utente ha effettuato l'accesso. Sembra che tutto ciò che devo fare è dirigere Rails per salvare le informazioni sulla sessione nel sessionStorage piuttosto che sui cookie. Ma non riesco a trovare nessuna informazione su questo.

Supponendo che non ci sia modo di configurare il session store per farlo in Rails, è possibile sovrascrivere il meccanismo di salvataggio della sessione ActiveRecord? Qualche suggerimento su dove cercare informazioni su come andare su questo?

+1

Hai trovato una risposta a questa domanda? – Marklar

risposta

-1

Ora si configura lo store di sessione basato su cookie tramite un inizializzatore, probabilmente in config/initializers/session_store.rb. In Rails 3 il session store è un pezzo di middleware e le opzioni di configurazione vengono inoltrate con una singola chiamata a config.session_store:

Your :: Application.config.session_store: cookie_store,: key => '_session '

È possibile inserire qualsiasi opzione aggiuntiva nell'hash con: chiave, ad esempio

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

Sto configurando qui il session store e usando il session store ActiveRecord. Come dovrei gestire questo per salvare in sessionStorage HTML5 invece di un cookie? –

1

A differenza di cookie, voci sessionStorage non possono essere creati con le intestazioni di risposta, e non sono inclusi automaticamente nelle intestazioni di richiesta. Questo mette molto del carico di lavoro per la gestione di sessionStorage/localStorage authentication su Javascript sul lato client. Tutti gli accessi autenticati dovrebbero avvenire attraverso le richieste XHR di Javascript che includono esplicitamente il token di autenticazione.

Se si desidera che l'utente abbia diverse sessioni simultanee e non si desideri creare il proprio sito come SPA, sarà necessario adottare un approccio alternativo con i cookie.

Un modo sarebbe utilizzare più domini per forzare i cookie in sottospazi separati. Imposta un record DNS con caratteri jolly e configura il server Web in modo che accetti tutte le richieste di corrispondenza indipendentemente dal prefisso. Ad esempio, gli utenti potrebbero essere predefiniti al www.yoursite.com. Fornirai un collegamento "crea nuova sessione" che apre una nuova scheda in un sottodominio casuale, ad es. 1234abcd.www.yoursite.com. Ciò potrebbe creare un problema se si utilizza SSL, tuttavia; i certificati SSL wildcard tendono ad essere molto più costosi.

Un modo più semplice sarebbe quello di educare gli utenti sulle modalità private/icognito dei loro browser, che mantengono negozi di cookie indipendenti. Tuttavia, convincere gli utenti a leggere la documentazione è sempre una sfida.

Problemi correlati