2011年5月6日

「Viewstate MAC 的驗證失敗」 的另一個可能

「Viewstate MAC 的驗證失敗。blah blah blah machineKey 設定 blah blah」錯誤,是一個常見的 asp.net webform 問題(好累,以後都要說是 MVC 還是 webform )。起因多半來自兩個:

1. 是 webfarm 的設定,就是向A主機要了xxx.aspx,但postback卻到了B主機。實務上,我們還是寧可用big IP這類的產品做分流,遠比用軟體手段設定session state mirror問題要少。這個部分多半要找網管確認問題,比較麻煩。

2. 是讓頁面自動做postback,但卻在Viewstate還沒load完前就進行。

以上的內容,這裡有比較詳細的解釋

昨天客戶的客戶又發生這樣的錯誤,原來以為是 1.,但客戶說他自己之前偶而也會遇到。這個「偶而」讓我覺得很奇怪,因為公司內部是不會透過Big IP的。把 asp.net 2.0 關於 machinekey 的 security 章節讀完了以後,才想到:阿,Autogenerate 的 machineKey也會是問題阿!

Google了一下,果然:
http://social.msdn.microsoft.com/Forums/en-US/netfxsetup/thread/1a3a947b-fda0-4446-a4c7-7e8730d4064d/

上面討論串的回答有提到這一點,也就是每次app pool 被recycle以後,machineKey就會重新產生一次。如果使用者之前就進入我們的網站,但卻很久沒有進行任何操作,等到 app pool 被 recycle了以後,使用者卻用recycle之前的網頁進行postback,就會導致這樣的情況發生。

所以比較安全的作法,就還是把machineKey給定下來。

沒有留言:

張貼留言