2009-12-14 103 views
0

在我們的應用程序中,我們有一個「BasePage」,它聲明瞭應用程序中每個頁面或多或少使用的一些屬性。會話狀態v ViewState

在這些屬性中,它們會寫入ViewState。這些都是一個整數或小的字符串值,沒有什麼大的。例如,典型的用途是調用Web服務並在頁面中保存一個用於使用的ID。

我使用視圖狀態,因爲我警惕會話變量的損失應該IIS回收例如。另外,我想,非常小的值不會大大增加頁面大小。

我是否過分偏執會議,但它會是一個更好的選擇。

我們的環境是每個服務器上的SSL終止2服務器集羣,負載平衡器保持粘性會話 - 所以在Proc.Natl.Acad.Sci.USA,不是每說一個問題,我只是很警惕它。

回答

3

永遠不要相信你的用戶發送的數據。

即使您收到的所有數據不敏感,如果你把它發送給你的用戶的瀏覽器,你應該到前再檢查一遍使用它。也許大多數用戶是合法的,但只有一個可以打破你的應用程序。

你有什麼選擇來存儲數據?

  • 隱藏字段;可以很容易地在客戶端篡改
  • Cookie;古老的方法來保持用戶特定的數據,但非常有限。
  • ViewState;您的數據將轉到客戶端並使用帶寬返回,並可能被篡改。
  • Session,InProc;你永遠不會有問題,直到應用程序池得到回收利用
  • 會話,狀態服務器;您將會話數據保存在另一個服務器進程中。
  • 會話,數據庫;可以與幾乎(如果不是全部的話)負載均衡場景一起工作,因爲您不需要粘貼會話,也不必擔心應用程序池回收。您的所有數據都屬於 us 您的SQL Server。

讀你的情況,你可能需要處理進程外會話存儲。

+0

我認爲在我們的情況下,我會堅持viewstate作爲對象是非常輕的一種。我已經測量了設置前後的視圖狀態,以及它的極小值。 我們沒有看過proc,sql會話存儲,但我們的基礎設施人員表示,由於I/O負載增加,不值得提高性能(如果我們的環境發生變化,我們必須重新審視它)。 雖然很好的選項總結,謝謝 至少從我閱讀所有這些帖子,除了增加的頁面大小,我沒有做任何大幅度錯誤,因此, – Solyad 2009-12-14 11:00:09

1

如果它不是敏感數據,我還希望將它存儲在HTML而不是會話中。

2

我認爲這是最好避免使用會話狀態如果可能的話,尤其是在服務器羣集上,即使您正在使用粘性會話。會話可能會過期,或者在IIS回收時消失(如您所說)。

我會盡量保持ViewState或cookie中的值。