我有一個使用設計進行身份驗證的應用程序。 Ruby 1.9.2上的Rails 3,乘客在nginx之上。會話正在越過。 Ruby on Rails的
這是我的問題:我注意到,occaisionally我的會議越來越。當作爲一個用戶登錄時,我有時會成爲另一個用戶。這真是一個可怕的問題。我設法通過使用active_record會話存儲來停止它。但我很難確定它會在哪裏發生。它在使用cookie存儲和memcached存儲時都會發生。我不確定從哪裏開始調試。我已經完成了我的所有代碼,並且只從'current_user'讀取而不是寫入。我沒有任何代碼存儲會話中的項目。
任何人都可以給我關於在哪裏或者如何發生這種情況的建議嗎?
更新:
我設置在頁面頂部的div來傾倒在每個請求的會話內容。這不僅僅是用戶切換,它是整個會話。我在會話中設置了一些虛擬變量,以查看會發生什麼。當會話越過時,(用戶A變爲用戶B)用戶A現在看到用戶B具有的虛擬變量。用戶B已註銷。
更新2
我發現這裏的堆棧溢出的另一個問題是描述完全相同的問題:In Rails, what could cause a user to have another user's session?
它看起來像它可能是乘客的問題?但更重要的是,它是如何發生的呢?這是一個REAL大問題。我該如何制止這種情況?
更新3
我現在用的獨角獸爲我的應用程序。我設置了config.threadsafe!並開始獨佔使用活動記錄會話。沒有更多的memcached會話。問題沒有了。至少我可以停止拉我的頭髮,因爲安全孔被堵塞了。
我還是想知道究竟是什麼導致了它。大部分教程都展示瞭如何使用默認的產卵方法來設置乘客。當然,我認爲memcached會對其他方法的會話管理效果最好。特別是在多應用程序服務器環境中。
更新4
好吧,最後一個和最後的更新。這是使用相同memcached連接的分叉進程的問題。我通過使用dalli memcached客戶端修復了它,並在獨角獸或乘客的after_fork回調中重置連接。
您使用的是不同的用戶在同一個瀏覽器?還是隻是一個完全隨機的其他用戶,你最近沒有用過? – 2011-01-21 13:30:52
未使用同一瀏覽器的其他用戶登錄。即使在不同的網絡上也會發生這種情況用戶A可能成爲用戶B.即使他們在不同的位置。它是隨機發生的,唯一發現的是它們都必須登錄才能發生。 – demersus 2011-01-21 15:35:01