2011-10-13 37 views
3

我有一個Rails 2.3.5應用程序,我正在遷移到Rails 3.0.10,它遇到了會話問題。Rails會話ID是零

由於會話沒有標識(request.session是空的散列,request.session_options [:id]爲零),所以在集成測試期間某些代碼失敗。我們目前正在使用webrat,但同樣的事情發生在水豚和標準扶手上。會話似乎是正確設置的,因爲一些集成測試具有會話ID。它看起來像會話標識僅在嘗試訪問會話標識(即大多數)之前未登錄的測試中缺失。

我試過將會話後端(目前是基於cookie)切換到ActiveRecord,但這沒有幫助。我創建了一個新的Rails 3.0.10應用程序,它也有零會話ID。我甚至還深入瞭解了Rails的會話處理過程,並且看起來好像沒有會話標識正在生成,如果會話缺失的話。

這是缺乏會議id預期的行爲,有記載的地方?如果這是一個bug,是否有一個Rails版本可以正確生成會話ID?

+0

我剛碰到與Rails 3.2.8應用程序和Capybara 2.0.1相同的情況。任何更新? – hiroshi

回答

3

我見過如何解決這個問題的唯一方法就是開會。

sid1 = session[:session_id]  
sid2 = request.session_options[:id] 

但是,如果由於某種原因會話cookie被刪除,它仍然可能發生。

0

我試過了,沒有結果。我也嘗試過session [:foo] ='bar',因爲我喜歡它看起來更好但仍然沒有結果的方式。

我重新啓動,仍然沒有快樂。然後我進入瀏覽器設置並刪除了我的cookies。這解決了它。從這種體驗看來,cookie可以防止會話被強制。我一直在改變類名和改變我的數據庫表。不知何故,我損壞了我的cookie。