2014-01-08 35 views
0

我主要針對桌面開發,所以我傾向於認爲WebForms等同於WinForms的Web。不幸的是,這不是事實。查看狀態超時錯誤

最近我發現Viewstate有某種超時。

我的問題是類似的,因爲我已經閱讀了大多數問題,尤其是here(在我的情況下只有5到10分鐘左右)。

Here微軟表示,這個問題的一個解決方案是:

<asp:Page EnableViewStateMac="False" /> 

但是我們可以進一步閱讀,他們說:

Security Note: 
This attribute should never be set to false in a production Web site, 
even if the application or page does not use view state. 
The view state MAC helps ensure the security of other ASP.NET functions 
in addition to view state. 

爲此,我不想EnableViewStateMac設爲假,我沒有訪問我的服務器(共享主機)。

我的問題是:即使我們的頁面長時間閒置,我們是否可以在回傳之間存儲Viewstate?如果是,如何?

謝謝

+0

你可以告訴你在ViewState用來存儲對象的代碼? – rene

+0

@rene:我不存儲ViewState。我甚至不知道這是否可能。所以,我的問題的原因。 – user3174393

+0

@ user3174393您可以添加有關您遇到的實際錯誤的詳細信息嗎? – geedubb

回答

0

的視圖狀態是利用計算機密鑰,以確保它不回發過程中被篡改加密。用於加密視圖狀態的機器密鑰默認是自動生成的,如果超時發生,則密鑰的解密將失敗,因爲機器密鑰將被重新生成。

machinekey默認在機器級配置文件中可用。

<machineKey validationKey="AutoGenerate,IsolateApps" 
      decryptionKey="AutoGenerate,IsolateApps" 
      validation="SHA1" decryption="Auto" /> 

要解決這個問題,您可以使用您自己定義的機器密鑰。您也可以使用在線工具生成,如this或通過IIS。

如何將此機器密鑰添加到web.config中可以在MSDN處讀取。

應劃歸system.web部分,這樣的 -

<configuration> 
    <system.web> 
    <machineKey decryptionKey="Decryption key goes here,IsolateApps" 
       validationKey="Validation key goes here,IsolateApps" /> 
    </system.web> 
</configuration> 
+0

只要我不知道生成機器密鑰的工具在網絡服務器上運行,對吧?如果是這種情況,我可以這樣做,因爲我無法訪問服務器。這是一個共享主機。 – user3174393

+0

您提供的MSDN鏈接說:「退休內容」 – user3174393

+0

是內容標記爲退役,但它仍然有效,並很好地解釋了machinekey概念。您需要在web.config中添加machinekey值 – NoviceProgrammer