在ASP.NET开发中,虽然ViewState使用起来很简单方便,但是ViewState也有一些限制和缺点,比如安全性和性能。 ViewState中的数据默认是使用base64进行编码从而保存到页面里,因此,虽然用户不能直接看到里面的数据,但是base64不是加密算法,只是一种编码算法,任何人都能对base64进行反编码,从而看到我们往ViewState里保存的数据。所以敏感机密数据不适合保存在ViewState中。 另一方面,由于ViewState保存在页面里,如果保存了较大数据量的话,比如含100条数据的dataset,你的页面打开就会很慢。不仅每次页面postback,ViewState都会在客户端和服务器端往返,造成网络传输数据量大,服务器端序列化和反序列化加重服务器负担。所以不推荐往ViewState中保存较大数据。 那么在ViewState不适合的地方用Session吧。 但是Session在作为pagelevel用的时候,由于其全局共享的特性,如果key重复的话,容易造成Session数据覆盖的问题。 可能的情况就是在浏览器的两个标签(Tab)中打开同一个页面,如果我们按照Session的正常的用法用的时候(Session["Key"] = value;),Tab1 中往Session存一个值,然后Tab2中往Session中存值的时候,由于key相同,会覆盖前一个值。如果你的用户不能接受这种情况的话,这就是一个很麻烦的问题,因为从IE7开始包括一些其他主流浏览器,Tab之间都是共享session的。 下面,我实现一个Page Level的Session来解决Key相同的问题。 ?View Code CSHARP1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [...]






