2009-06-24 8 views
5

Sto sviluppando un'applicazione per binari 2.3.2. Ho bisogno di mantenere session_id per un record di ordine, recuperarlo e infine cancellare session_id quando l'ordine è completato. Ha funzionato quando ho usato i cookie come archivio di sessione ma non per l'archivio active_record. (Ho riavviato il mio browser, quindi nessun problema di cache.)Rails 2.3 sessione

Conosco le rune 2.3 implementa il carico di sessione lazy. Ho letto alcune informazioni a riguardo ma sono ancora confuso.

Qualcuno può chiarire come utilizzo session_id per un caso del genere?

Quello che sto facendo è ...

 
A user make an order going through several pages. 
There is no sign-up, neither login. 
So I keep session_id in the order record so that no other user can access the order. 
@order = Order.last :conditions => {:id => params[:id], :session_id => session[:session_id] } 
When the order is finished, I set nil to session_id column. 

Come ti implementare un caso del genere in seduta pigra (e conservare active_record) ambiente?

Grazie.

Sam

+0

Che cosa "non funziona" e, cosa più importante, che cosa hai provato? Hai confermato che session_id è stato assegnato alla riga DB e che viene mantenuto nei tuoi cookie? – Matchu

risposta

9

Ho incontrato lo stesso problema di programmazione un carrello della spesa. Ci sono in realtà due problemi. A partire dalle rotaie 2.3, le sessioni sono pigre e la sessione [: session_id] non funziona più. È necessario accedere alla sessione prima di poter lavorare con esso.

puts request.session_options[:id] 
session[:session_id] # this forces load of the session in Rails 2.3.x 
puts request.session_options[:id] 

This uscite:

nil 
78eb1e371f3378ed98874f9ce372d652 

Modifica: session.session_id è obsoleta, così all'utente request.session_options [: id] invece.

Update 2: Questo problema verrà risolto in 3.x (non 2.3.5) https://rails.lighthouseapp.com/projects/8994/tickets/2268-rails-23-session_optionsid-problem

Greg

+0

Grazie per l'avviso di ritiro su session.session_id Greg! – Dr1Ku

3

Preferisco usare questo metodo per registrare l'ID sessione (ma Rails 2.2 memorizza l'ID sessione nel file di registro senza modifiche)

application_controller.rb 
    before_filter :log_session_id 

    private 
    def log_session_id 
    session[:session_id] 
    logger.info "Session ID: " + request.session_options[:id] 
    end 
end