2011-05-02 89 views
3

在我註銷動作我這樣做:怪異會話問題

reset_session 
cookies.delete(:rememberme) 
redirect_to root_url 

但會議沒有被破壞。

當我檢查了頭,發到我的註銷操作的要求顯然包括會話ID:

Cookie: hiddenalerts=site_vrfy_124258; __utmz=REMOVED_INFO.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); elpriv=REMOVED_INFO; SESSID=b39a9a89bb6a39ea91b620fe0da392ed; __utma=REMOVED_INFO; __utmc=REMOVED_INFO; __utmb=REMOVED_INFO 

但響應,僅清除了rememberMe的cookie,它不會清除會話cookie:

Set-Cookie: rememberme=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT 

如果我將這與相同的標題比較,當我註釋掉rememberme cookie刪除。請求看起來是一樣的:

Cookie: hiddenalerts=site_vrfy_124258; __utmz=REMOVED_INFO.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); elpriv=REMOVED_INFO; SESSID=b39a9a89bb6a39ea91b620fe0da392ed; __utma=REMOVED_INFO; __utmc=REMOVED_INFO; __utmb=REMOVED_INFO 

但響應看起來更像是我期望(和我的會話被正確銷燬):

Set-Cookie: SESSID=50640523cf32b5b0fe8c93eb16aba6dc; path=/; HttpOnly 

有其他人遇到此?我只能假設會話處理程序和ApplicationController不具有與cookie相同的引用,所以如果您修改控制器中的cookie,則會破壞reset_session所做的任何操作。我可以通過手動刪除會話cookie來解決此問題,但我想了解發生了什麼情況,並且首先是否有已知的解決方法。

很顯然,我需要在退出過程中清除「記住我」 cookie中的能力,否則,用戶只需立即重新登錄

編輯。|問題引發爲錯誤。我現在要解決它。 https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/6763-deleting-a-cookie-and-calling-reset_session-in-the-same-controller-action-does-not-send-new-session-cookie

+0

我遇到類似的問題。 Rails cookie處理似乎現在已經有一段時間了。你能發佈你如何解決它嗎? – Dex 2011-05-23 23:52:10

+1

我實際上將問題追蹤到我的緩存代理,而不是Rails本身。該代理將「Set-Cookie:」標頭一起打開。但是,如果你想知道我的工作是在發現問題之前發生的,我只是將控制器操作更改爲「如果cookies [:rememberme]; cookies.delete(:了rememberMe); redirect_to的(request.url);結束「,所以它實際上只是清除cookie並通過兩個請求重置會話。 – d11wtq 2011-05-24 08:03:20

+0

我還發現,在功能測試中,除非您調用'@ request.env [「HTTPS」] =「on」',否則安全cookie將不可見,這似乎很愚蠢,但無論如何。 – d11wtq 2011-05-24 08:04:10

回答

0

只是爲了確保,但您是否將此cookie分配給正確的密鑰?餅乾[:與rememberMe]?如果它沒有找到你的哈希屬性,cookie將不會被刪除。

+0

它正確刪除了rememberme cookie。問題是,除非我不刪除cookie,否則不會在Set-Cookie:標題中發送新的會話標識。我已經解決了這個問題,但它看起來像Rails中陳舊的Cookie數據錯誤。 – d11wtq 2011-05-02 07:30:31