記一次Nancy 框架中遇到的坑
前幾天,公司一個項目運行很久的Nancy框架的網站,遇到了一個很詭異的問題。Session 對象跳轉到另外一個頁面的時候,session對象被清空了,導致用戶登錄不上。搞了兩天,終於解決了。於是把它記錄下來,以避免其他人也碰到這種情況。
起因
公司一個Nancy 框架 開發的web網站,以前一直都是好的,nancy 框架也用在了很多項目里面,基本上已經很成熟很穩定了,但是在前幾天發布某個web網站的時候,竟然出現部分用戶登錄不上的情況。剛開始以為是人員的權限有問題,於是檢查各個人員的權限。但是發現權限設置沒問題,而且同一個角色下的兩個人,竟然還會出現一個用戶能登陸,而另一個卻不能登陸的詭異情況。
調查
在確認不是系統權限設置的問題之后,開始debug 跟蹤調試。發現本來已經登陸成功,存儲用戶登陸信息的session對象,在跳轉到index 頁面之后,session 對象竟然不清空了,這是怎么回事呢,可是也不是所有的用戶的登陸session都會被清空,而是部分人的session對象被清空了,而且登陸功能,在前期一直都是正常的,沒出現過這種情況。
- 首先懷疑session存儲的對象,最近是不是有變動,詢問后,發現,User 對象最近確實是增加了一個字段,但是增加一個字段,怎么會影響到session的存儲呢,
2. 把新加的字段去掉,原先不能登陸的用戶,竟然能夠可以登陸成功,但是其他的一些用戶,還是不能登陸,於是開始比較能登陸的用戶和不能登陸的用戶的數據有什么不同。有可能還是數據的原因,對比之后發現用戶數據基本沒什么問題,但是普遍的是能登陸上的用戶的信息都比不能登陸上的用戶的信息要少。
3. 於是基本可以斷定是由於session 存儲的用戶數據的大小導致的。可是,Nancy 框架下的session 會對 存儲數據的大小有限制呢。
解決
既然知道問題出在哪,於是去jabbr 里Nancy聊天室問框架的作者。老外表示:Nancy的session機制, 是基於cookie 的,客戶端和服務器交互的cookie 大小限制在4k 以下,超過4k 就會獲取不到。
但是經過我們的反復測試,確定限制是在2k,而不是4k,我去,坑啊。但是不管是4k還是2k 確實是有這個限制存在。
於是問他這個能否設置大一點。老外答復說:大小不能設置,只能修改存存儲對象的大小,因為他們在設計之初的時候,session 就不是用來存用戶的全部信息的。而是只存用戶主要信息或是用戶的唯一ID ,到用到用戶的信息的時候,再去數據庫里面讀取。
看來只能減少用戶信息的大小了。於是去掉了Session 里面的User 對象de 一些沒有用的字段。果然所有的用戶都能進了。 折騰了2天的問題,終於解決。