2013-08-24 94 views
2

我正在將Rails 2中的Rails應用程序直接升級到Rails 4.我正在使用新的/config/initializers/session_store.rb文件和CookieStore,但由於某些原因,我的會話未保存。Rails會話不保存

當試圖沿着 render :text => "#{request.session_options[:id]}" 線做一些事情,我得到一個新的會話ID每次刷新。

我試過不同的瀏覽器,並且都應該接受cookie。

我不知道發生了什麼事情。爲什麼這些會議不會持續?!

編輯:謝謝大家的建議。下面是多一點信息,以及幾件事情我已經注意到:

  • 首先,我的設置 - 我通過RVM的Ubuntu VM在我的Windows上運行使用Rails 4 /紅寶石2服務器7機器。
  • 儘管我是從Rails 2進行升級,只是真的適用於模型/控制器/視圖/等 - 我爲所有支持基礎架構生成了新的Rails 4應用程序。
  • 我在同一個虛擬機上創建了另一個應用程序,只需設置一個會話然後顯示,並且工作正常。
  • 會話存儲的內容根據用戶在做什麼而有所不同,但通常它只包含一個用戶標識(只是一個整數),偶爾還會多一點 - (我首先注意到這一點在嘗試通過時表現出來來自OAuth寶石的OAuth令牌)
  • 我注意到,如果虛擬機的系統時鐘落後於Windows 7主機時鐘,用戶ID會話將會保留。這會導致其他問題,尤其是OAuth,但似乎只是時間問題。我嘗試過從我的environments/development.rb中刪除時區,但這沒有幫助。
+0

你可以發佈文件的內容。你有沒有定義secret_token? rails日誌內的任何警告? – jurglic

+0

Sure @jurglic - session_store.rb文件是'Uplinkr4 :: Application.config.session_store:cookie_store,key:'_uplinkr4_session'',祕密標記在secret_token.rb中定義。我在日誌中看到絕對沒有警告(與此有關)。 – Jared

+0

看起來不錯。您在更改這些文件後是否重新啓動了服務器?你沒有任何機會在瀏覽器中禁用cookies? – jurglic

回答

0

來源:Railscasts Episode 415 Upgrading to Rails 4

有我們需要在祕密 令牌初始化一個更多的配置變化。在Rails 4中,此文件 中的配置選項已從secret_token重命名爲secret_key_base。我們需要 指定這兩個選項,而我們正在從Rails 3過渡,但一旦 我們已經成功遷移了我們的應用程序,我們可以刪除 secret_token選項。最好爲我們的 secret_key_base使用不同的令牌。

這是必要的,因爲我們將從客戶端上存儲的序列化cookie 轉移到加密的cookie。這可以防止用戶輕鬆地查看其會話cookie的內容。

情節包括一個非常好的一系列有關升級2-4提示的,我能做到這一點成功地利用本教程。

+0

謝謝。其實我有一個'secret_key_base'已經 - 實際上,(我也許應該澄清這種早期),我產生一個全新的軌道4應用程序,然後我移動我的控制器/模型/視圖/助理/等把它和調試因此。對會議的所有引用,因爲據我所知,只是設置或從他們閱讀 - 幾乎所有配置會話仍然應該從鋼軌4應用程序生成的默認值。 – Jared

+0

我也經歷了同樣的過程。該教程在這個過程中幫助了我很多。 –

4

作爲一個籠統的回答了幾個可能的問題是

  • 會議size over 4K限制(這顯然是這種情況)。

    如果您嘗試存儲超過4K的數據,則會引發CookieOverflow。

請記住,如果您在會話中存儲對象,則該對象在存儲之前會被序列化,並且其大小會更大。有關特定問題的一般問題和可能解決方案的更多信息, here

  • 問題與CSRF protection

    如果安全令牌不匹配預期,會話 將被重置

編輯:要檢查它是否是一個CSRF的情況下,就可以了,如下阿卜杜意見, 暫時禁用 protect_from_forgeryApplicationController

+0

我的會議被重置,我被完全無視「警告:無法驗證CSRF令牌真實性」在我的日誌。如果您在日誌中看到這個問題,那麼很可能是CSRF問題正在刪除您的會話。 –

+2

爲了看它是否是一個CSRF事情復位會話,暫時註釋掉'ApplicationController' – Abdo

+0

@Gonfva了'protect_from_forgery'行如何解決「與CSRF保護的問題。」 – vidal

2

我有類似的症狀。事實證明,這是因爲我添加了rails-api gem,這完全破壞了會話保存。

+0

是如何保存與Rails API? –