一道面试题:试介绍ASP.NET页面之间数据传递的几种方法,并介绍一些这些方法的优缺点?
下面的是我的回答,这些也是常用的方法,当然你可能认为还可以在类中定义精通变量等,此处不讨论
1)Request.QueryString
在ASP时代,这个是较常用的方法,到了ASP.NET,好像用的人不多了,但是不管怎么说,这是一个没有过时,且很值得推荐的方法,因为不管是ASP还是ASP.NET,最基本的都还是基于HTTp协议的。 缺点是非常明显的,让在多个页面传递时,可能就Request不到了
2)Session
这个是最常用的一个方法,Session的优点是使用简单,缺点是占用服务器资源,因为每一个Session都意味这服务器需要维护相应客户的会话信息,自然如果登录的用户多了,那么将非常占用服务器资源。另外Session还有一个缺点,默认的如果你登录后20分钟内没有任何动作,服务器自动会取消该会话,所以那时你又需要登录。
PS。这里使得我想起一个事情,前几天有一个公司让我看了一段代码,在登录时,就是使用Session记录用户登录的,My GOD,微软知道了肯定要吐血!!它辛辛苦苦给你提供的web.config里的配置 <deny user="*"/> 就要这一个配置,你不用,仍然用ASP时代的Session,岂不是浪费了MS的一片苦心
3)Application
这个在ASP时代还是比较常用的,主要用去存储全局变量,例如数据库链接信息,到了ASP.NET时代,用的不多,至少我好象一直没有用过。
4)Cookie
这个是我的最爱,Cookie最大的特点是由客户端维护,不用占用服务器资源,而且你可以设定用户登录时,Cookie的有效期,例如一天,这样在一天内你不用担心系统再让你登录。当然Cookie也有缺点,那就是安全性,因为Cookie在客户端,确实有些软件可以分析Cookie的登录信息,所以你写入Cookie的内容不要过于敏感,例如不要存储密码,还有作为安全,写入Cookie的内容最好要加密。
5)Viewstate
ASP.NET新增的,Viewstate使用简单,缺点是只能够在同一个页面使用,在ASP.NET2.0里这个问题可以使用Button的PostBackUrl进行结果。
6)Cache
使用Cache存储数据还想不多,但是毕竟也是一种手段,另外,在使用Cache存储DataSet时,其实还是引用而不是内容的拷贝。