驗(yàn)證視圖狀態(tài) MAC 失敗。如果此應(yīng)用程序由網(wǎng)絡(luò)場(chǎng)或群集承載,請(qǐng)確保 <machineKey> 配置指定了相同的 validationKey 和驗(yàn)證算法。不能在群集中使用 AutoGenerate。運(yùn)行時(shí)提示錯(cuò)誤: 驗(yàn)證視圖狀態(tài) MAC 失敗。如果此應(yīng)用程序由網(wǎng)絡(luò)場(chǎng)或群集承載,請(qǐng)確保 <machineKey> 配置指定了相同的 validationKey 和驗(yàn)證算法。不能在群集中使用 AutoGenerate。 StackTrace: 在 System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) 在 System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) 在 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) 在 System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) 在 System.Web.UI.HiddenFieldPageStatePersister.Load() 在 System.Web.UI.Page.LoadPageStateFromPersistenceMedium() 在 System.Web.UI.Page.LoadAllState() 在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 在 System.Web.UI.Page.ProcessRequest() 在 System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) 在 System.Web.UI.Page.ProcessRequest(HttpContext context) 在 ASP.pcpf_login_login_aspx.ProcessRequest(HttpContext context) 位置 d:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\famsweb\d5e90b06\537ccf9e\App_Web_login.aspx.d2f46862.6plrloiq.0.cs:行號(hào) 0 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
出現(xiàn)問題原因:自己還是不是很清楚,應(yīng)該是在本機(jī)同是使用虛擬主機(jī)訪問造成的問題 解決方案: 在web.config里配置 <pages enableViewStateMac="false"></pages> 添加到<system.web>配置節(jié)。 這種方法自己試驗(yàn)過,可以
還有人說:(這種方法沒試,不知道可不可以) 查下MSDN就明白了,validationKey和decryptionKey的默認(rèn)值是AutoGenerate,由系統(tǒng)隨機(jī)生成密鑰,如果在本地或者使用的是獨(dú)立主機(jī)通常不會(huì)有什么問題,但是使用虛擬主機(jī),一臺(tái)服務(wù)器上有多個(gè)虛擬主機(jī)存在時(shí)就會(huì)出現(xiàn)以上問題,MSDN中也特別指出不能在群集中使用 AutoGenerate應(yīng)該指定固定的密鑰值,至此真相水落石出,立刻在web.config中添加關(guān)于machineKey的配置項(xiàng),并手動(dòng)設(shè)置其中的密鑰值,這里請(qǐng)注意,不同加密算法對(duì)于密鑰的最大字符長(zhǎng)度是不同的,在這里能夠使用的有AES,DES,3DES,SHA1,MD5,我只知道DES的密鑰字符長(zhǎng)度為16,3DES長(zhǎng)度為48,手動(dòng)設(shè)置時(shí)密鑰長(zhǎng)度必須等于其最大長(zhǎng)度,否則會(huì)出錯(cuò)!至于密鑰的16進(jìn)制值可以隨便輸入。 參考的matchineKey配置: <system.web> <machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" decryption="3DES"/> 加密位md5,32位時(shí)<machineKey validationKey="C3DD5E21134BDCAF7D951A2ED8E45F7E7395A8CEBAA6A43A8D8528A85B9AB00D" decryptionKey="ADCBCFC864936D0248917F2CF276E6F392F5A202F1DB53D9" validation="MD5" /> </system.web> |
|