2009-07-12 11 views
5

Sto riscontrando un problema con l'utilizzo delle variabili di sessione. Ho due controller chiamati 'graduate_students_controller' e 'current_students_controller'. Ognuno di questi controller controlla diversi file di visualizzazione. Sto usando le variabili di sessione con entrambi questi controller per memorizzare le informazioni di sessione.Rails: come è possibile accedere alle variabili di sessione utilizzando più controller?

Ecco il problema. Diciamo che ho due rapporti di file 'report/current_students_list', 'reports/graduate_students_list' ciascuno controllato separatamente dai controller sopra menzionati.

Ora, se provo ad aprire queste due pagine web all'interno del browser stesso e cercare di lavorare con loro contemporaneamente, ottengo l'errore 'nil accesso agli oggetti' dalla pagina in primo luogo caricato. L '"oggetto nullo" si riferisce a una variabile di sessione a cui si suppone che la prima pagina acceda. Tuttavia, quando utilizzo individualmente una di queste due applicazioni Web, funzionano correttamente.

Così la sua a me sembra che le variabili di sessione del web app in primo luogo caricato. vengono sovrascritti dall'app Web caricata in secondo luogo. forse perché la seconda pagina memorizza un nuovo cookie rispetto al primo?

Come posso risolvere questo problema?

Qualsiasi suggerimento è molto apprezzato.

Per chiarire un po 'di più: I due controller appartengono alla stessa applicazione Rails. E non sto usando identici nomi di variabili di sessione all'interno di entrambi i controller. Quindi io non riesco a vedere il motivo per cui essi possono essere sovrascritte

Sono nuovo di rotaie e mi sarebbe davvero apprezzare un certo aiuto con questo problema. Grazie.

+0

Con quale versione di Rails stai lavorando? Inoltre, questi controller sono entrambi nella stessa app Rails o in diverse app? –

+0

Ciao John, Sto usando la versione di rails 2.2.2. E la mia versione gemme specificata nel mio environment.rb è la seguente: ----------- # Specifica la versione gemma di Rails da utilizzare quando il fornitore/rotaie non è presente RAILS_GEM_VERSION = '1.2.3 'se non definito? RAILS_GEM_VERSION --------------- (non sto usando una versione più recente sulla mia macchina locale al momento come queste sono le impostazioni correnti sul nostro server di produzione. E voglio testare il mio app secondo loro) sì, questi controller e file di visualizzazione appartengono alla stessa app Rails. Quindi qualche idea su cosa sta causando questo problema? Grazie John – Vicer

+0

Giusto per chiarire, le variabili di sessione a cui questi due controllori stanno accedendo non hanno nomi comuni.Quindi non c'è motivo per la sovrascrittura di una variabile di sessione, a meno che la seconda pagina web caricata non stia memorizzando un nuovo cookie su quello esistente (quello che ha memorizzato la prima pagina)? Questa è l'unica ragione logica a cui riesco a pensare. Ma come puoi aggiustare qualcosa del genere? qualcuno ha incontrato una situazione simile prima? – Vicer

risposta

4

Non sono sicuro se si esegue due applicazioni, o si riferisce a due controller sotto la stessa applicazione. Se stai guardando diverse applicazioni web, allora penso che tu stia utilizzando lo stesso nome e la stessa chiave di sessione nel tuo ambiente per ciascuna di queste app. Provare a cambiare il valore della chiave nella vostra environment.rb:

config.action_controller.session = { :key => "_myapp_session", :secret => "..." } 

Se si utilizza la stessa variabile di sessione da due controller diversi nella stessa applicazione, quindi avrete bisogno di scrivere il codice per accogliere questo, anche se non raccomanderei di farlo. Quando si accede ai dati della sessione, verificare la presenza di valori nulli:

session[:some_key].nil? 

e fare in modo che il codice comune (vale a dire nel application_controller.rb) non è sovrascrivere i valori.

+0

Ciao Matt, mi riferisco a due controller nella stessa applicazione. Quando dici "stesse variabili di sessione" ti riferisci a nomi di variabili di sessione identiche usate da entrambi i controller? No, non lo sto facendo, i due controller usano nomi diversi per le loro variabili di sessione. Ho dato un'occhiata al mio application.rb e abbastanza sicuro ho trovato questo: sessione: session_key => '_StudDab_session_id' Quindi immagino che questo sia il problema? Ogni volta che carico una nuova pagina la sessione corrente viene sovrascritta? Posso risolvere questo problema specificando le chiavi di sessione univoche in ciascuno dei due controller? – Vicer

+0

No: la chiave di sessione deve essere univoca per ogni app, non i controller nella stessa applicazione. Penso che ci sia un bug da qualche parte nella tua app che sta eliminando il valore nella tua sessione. Ti consigliamo di registrare il valore delle variabili di sessione nella parte superiore dell'azione del controller, quindi di registrarle di nuovo alla fine. Vedi se cambiano, e risalgono da lì. – Codebeef

+0

Ciao Matt, cambiando il tasto di sessione, ho risolto il problema. Proverò a indagare e scoprire cosa lo sta causando. È un problema abbastanza frustrante. Grazie per i tuoi suggerimenti Matt. – Vicer

Problemi correlati