2010-11-09 5 views
6

La mia comprensione del ciclo di vita della sessione in Ruby on Rails (in particolare v3 e versioni successive) è che una sessione viene creata all'inizio di una richiesta, per ogni richiesta e se tale richiesta non contiene un cookie di sessione esistente ne verrà creato uno nuovo, altrimenti il ​​cookie di sessione verrà deserializzato e memorizzato nell'hash della sessione.E 'possibile che le sessioni di Rails vengano create "just in time"?

Lo scopo di questo, ovviamente, supporta una serie di funzioni di sicurezza come CSRF ecc

Tuttavia, questo pone un po 'un problema quando si tratta di caching delle pagine in un sito con servizi di cache HTTP e proxy come Varnish, poiché la maggior parte delle configurazioni tende a escludere questi (in genere tutti) i cookie sia sulla richiesta che sulla risposta (dato che la cache di solito è destinata a un pubblico generalizzato).

So che è possibile impostare Varnish ecc. Per creare l'hash dell'oggetto con i dettagli dei cookie inclusi, e questo porterebbe i dati memorizzati nella cache a quella sessione (e quindi a quell'utente), tuttavia mi chiedo se questo sia completamente necessario.

Ho un'applicazione che è abbastanza 'statica' in natura - il contenuto è tirato da un database, reso in una pagina che possono poi essere memorizzate nella cache - ci sono alcuni elementi (come il numero di commenti, 'recenti' articoli ecc) che può essere aggiunto con un ESI, ma per ogni richiesta Rails tende ancora a voler impostare una nuova sessione, e quando un utente ha già una sessione questa roba viene eliminata dal server cache.

Mi chiedo se potrebbe essere possibile (tramite funzionalità preesistente, o costruire la funzionalità da solo) per consentire allo sviluppatore di controllare quando è richiesta una sessione, e solo quando viene specificato è il back-and-forward con i cookie, l'inizializzazione/deserializzazione della sessione, ecc.

Che, o sto pensando a questo problema nel modo sbagliato e la necessità di affrontare la questione da un altro angolo ...

+0

Se lo lasci com'è ora e fai una chiamata ajax per caricare i pezzi "specifici dell'utente" della pagina, funziona? –

risposta

1

Se il sito è in gran parte statica, allora si consiglia di utilizzare la pagina completa cac Hing. Ciò elimina completamente Rails dalla richiesta e facciamo in modo che il server Web si occupi di esso una volta che il contenuto è stato generato. Potrebbe causare alcuni gravi mal di testa a seconda delle vostre esigenze esatte per quanto riguarda il conteggio dei commenti e gli utenti specifici però.

Problemi correlati