2009-06-24 4 views
5

Je développe un rail 2.3.2 app. Je dois conserver session_id pour un enregistrement de commande, le récupérer et finalement supprimer le session_id lorsque la commande est terminée. Cela a fonctionné lorsque j'ai utilisé des cookies comme magasin de session, mais pas pour le magasin active_record. (J'ai redémarré mon navigateur, donc pas de problème de cache.)Rails 2.3 session

Je sais que les rails 2.3 implémente une charge de session paresseuse. J'ai lu quelques infos à ce sujet mais je suis toujours confus.

Quelqu'un peut-il clarifier comment j'utilise session_id pour un tel cas?

Ce que je fais est ...

 
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. 

Comment pourriez-vous mettre en œuvre un tel cas dans l'environnement séance paresseux (et stocker active_record)?

Merci.

Sam

+0

Qu'est-ce qui "ne fonctionne pas" - et, plus important encore, qu'avez-vous essayé? Avez-vous confirmé que session_id est affecté à la ligne DB et qu'il est géré dans vos cookies? – Matchu

Répondre

9

J'ai rencontré le même problème en programmant un panier. Il y a en fait deux problèmes. À partir des rails 2.3, les sessions sont chargées paresseusement et session [: session_id] ne fonctionne plus. Vous devez accéder à la session avant de pouvoir travailler avec.

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

Ce sorties:

nil 
78eb1e371f3378ed98874f9ce372d652 

Mise à jour: session.session_id a été dépréciée, utilisez donc request.session_options [: id] au lieu.

Update 2: Ce sera corrigé dans 3.x (non 2.3.5) https://rails.lighthouseapp.com/projects/8994/tickets/2268-rails-23-session_optionsid-problem

Greg

+0

Merci pour l'avertissement deprecation sur session.session_id Greg! – Dr1Ku

3

Je préfère utiliser cette méthode pour enregistrer Session ID (mais Rails 2.2 stocker ID de session dans le fichier journal ainsi sans aucune modification)

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 
Questions connexes