2011-11-04 19 views
1

我繼承了一個帶有cookie/session問題的Rails 3應用程序。也就是說,某些東西似乎是非確定性的,每隔一段時間就會清除會話或cookie中的所有信息。我在控制檯中觀看時重現了這個錯誤,並且應用程序每隔一段時間都會發送一個空的會話cookie,並將其清除爲白天。它很好地Base64編碼,我期望從一個Rails cookie存儲;似乎有關刪除會話和/或cookie的過分熱情。很好,一個bug,讓我們來修復它。如何在Rails 3中調試會話和cookie?

我的問題是:我該如何調試Rails 3的會話或cookie的問題?這個應用程序有相當大的依賴關係堆和一大堆自己的代碼;我寧願只觀察會話和cookies,我不知道有什麼好的方法來查看編輯它們的內容。我可以在請求開始時輸出它們的內容,然後在一個之後輸出,但它們都是非常棒的。我什至不知道如何覆蓋會話設置器,因爲它只是一個在C中實現的哈希。我做了一些確認,但沒有發現任何令人驚訝的事情,並且我知道很多會話魔術發生在Rails本身中。我懷疑實際的會話= {}正在發生在應用程序中。

這裏的任何想法?我可以在哪裏插件?有沒有我不知道的會話或cookie的測試設施?

回答

0

我已經做了一些Rails的會話和餅乾調試,這是真的只是一個開放的Rails代碼的問題,並通過它梳理,把它調試語句等,很難在第一,但你學到很多東西,下次更容易。 Rails代碼庫實際上並不壞,一旦你習慣了。

也許這並沒有幫助,但希望能讓你感覺更好,如果你必須深入研究。運氣不好,下一個答案將會是有人說'哦,是的,只是翻轉這個配置開關'。 Fwiw,在我的情況下,Rails在會話中沒有做任何不正確的事情或離奇的事情。

+0

這是最終我不得不這樣做,對話重置期間打印調用堆棧。 (這是一個csrf問題)。 – bhuga

2

這段代碼可能會有所幫助:

puts request.env["HTTP_COOKIE"] # The whole cookie 
verifier = ActiveSupport::MessageVerifier.new(SECRET_KEY) 
r = cookies['_your_session'] # encrypted session 
puts r 

if r && (g = verifier.verify(r)) #decrypt session 
    puts g 
else 
    puts "Your secret key is wrong" 
end 
+0

在會話重置期間轉儲調用堆棧是核選項,仍然是正確答案,但這值得讚揚。 – bhuga