会话状态v ViewState

时间:2009-12-14 08:13:11

标签: asp.net session viewstate

在我们的应用程序中,我们有一个“BasePage”,它声明了应用程序中每个页面或多或少要使用的许多属性。

在这些属性中,他们写入ViewState。这些通常都是int或小字符串值,没什么大不了的。例如,典型的用途是调用Web服务并保存id以在页面中使用。

我使用了viewstate,因为我担心IIS回收时会丢失会话变量,例如。另外,我认为,非常小的值不会大大增加页面大小。

我是否对会话过于偏执,这是一个更好的选择。

我们的环境是一个2服务器群集,每个服务器都有SSL终止,由负载均衡器维护粘性会话 - 所以使用In Proc不是问题,我只是非常警惕它。

3 个答案:

答案 0 :(得分:3)

永远不要相信您的用户发送数据。

即使您收到的所有数据都不敏感,如果您将其发送到用户浏览器,则应在使用前再次检查。也许大多数用户都是合法的,但只有一个用户可能会破坏您的应用程序。

您可以选择存储数据吗?

  • 隐藏的田地;在客户端很容易被篡改
  • 饼干;保持用户特定数据的古老方法,但规模有限。
  • 视图状态;您的数据会转到客户端并使用带宽返回,并且可能会被篡改。
  • 会话,InProc;在应用程序池被回收之前,你永远不会遇到问题
  • 会话,状态服务器;您将会话数据保存在另一个服务器进程中。
  • 会话,数据库;可以使用几乎(如果不是全部)负载平衡方案,因为您不需要坚持会话,也不用担心应用程序池回收。您的所有数据都属于 us 您的SQL Server。

阅读您的场景,您可能需要处理进程外会话存储。

答案 1 :(得分:2)

我认为最好尽可能避免使用会话状态,尤其是在服务器群集上,即使您使用粘性会话也是如此。当IIS回收时,会话可能会过期或消失(如您所说)。

我会将值保存在ViewState或cookie中。

答案 2 :(得分:1)

如果它不是敏感数据,我也希望将其存储在HTML而不是会话中。