2009-06-24 116 views
5

我正在開發一個rails 2.3.2應用程序。 我需要爲訂單記錄保留session_id,檢索它並最終在訂單完成時刪除session_id。 它工作時,我用cookies作爲會話存儲,但它不適用於active_record存儲。 (我重新啓動了瀏覽器,因此沒有緩存問題。)Rails 2.3會話

我知道rails 2.3實現了延遲會話加載。 我讀了一些關於它的信息,但我仍然感到困惑。

有人可以澄清我如何使用session_id這種情況?

我在做什麼...

 
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. 

你將如何實現懶惰會話(與active_record存儲)環境中這種情況?

謝謝。

山姆

+0

什麼「不工作」 - 而且,更重要的是,你嘗試過什麼?您是否確認session_id正在分配給數據庫行,並且它正在Cookie中維護? – Matchu 2009-06-24 00:37:10

回答

9

我遇到了編程購物車相同的問題。實際上有兩個問題。 從rails 2.3開始,會話被延遲加載,session [:session_id]不再有效。您必須先訪問會話,然後才能使用它。

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

此輸出:

nil 
78eb1e371f3378ed98874f9ce372d652 

更新:session.session_id已被棄用,所以使用request.session_options [:ID]代替。

更新2:這將是固定在3.X(不是2.3.5)https://rails.lighthouseapp.com/projects/8994/tickets/2268-rails-23-session_optionsid-problem

格雷格

+0

感謝您對session.session_id的棄用警告! – Dr1Ku 2010-03-06 12:22:44

3

我更喜歡使用這種方法登錄會話ID(但在日誌文件中的Rails 2.2存儲會話ID,以及沒有任何修改)

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