热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET页面间数据传递的方法(总结修改版)

ASP.NET页面间数据传递的方法(总结修改版)00、引言Web页面是无状态的,服务器对每一次请求都认为来自不同用户,因此&

ASP.NET页面间数据传递的方法(总结修改版)

  00、引言

  Web页面是无状态的, 服务器对每一次请求都认为来自不同用户,因此,变量的状态在连续对同一页面的多次请求之间或在页面跳转时不会被保留。在用ASP.NET 设计开发一个Web系统时, 遇到一个重要的问题是如何保证数据在页面间进行正确、安全和高效地传送,Asp.net 提供了状态管理等多种技术来解决保存和传递数据问题,以下来探讨.NET 下的解决此问题的各种方法和各自的适用场合。

  1、ASP.NET页面间数据传递的各种方法和分析

  1.1 使用Querystring 方法

  QueryString 也叫查询字符串, 这种方法将要传递的数据附加在网页地址(URL)后面进行传递。如页面A.aspx 跳转到页面B.aspx,可以用Request.Redirect("B.aspx?参数名称=参数值")方法,也可以用超链接:,页面跳转后,在目标页面中可用Ruquest["参数名称"]来接收参数。使用QuerySting 方法的优点是实现简单, 不使用服务器资源;缺点是传递的值会显示在浏览器的地址栏上,有被篡改的风险,不能传递对象,只有在通过URL 请求页时查询字符串才是可行的。

  1.2 利用隐藏域

  隐藏域不会显示在用户的浏览器中, 一般是在页面中加入一个隐藏控件, 与服务器进行交互时把值赋给隐藏控件并提交给下一页面。隐藏域可以是任何存储在网页中的与网页有关的信息的存储库。使用隐藏域存入数值时用:hidden 控件.value=数值,取出接收数值时用:变量=hidden 控件.value。使用隐藏域的优点是实现简单, 隐藏域是标准的HTML 控件,不需要复杂的编程逻辑。隐藏域在页上存储和读取,不需要任何服务器资源,几乎所有浏览器和客户端设备都支持具有隐藏域的窗体。缺点是存储结构少,仅仅支持简单的数据结构,存储量少,因为它被存储在页面本身,所以无法存储较大的值,而且大的数据量会受到防火墙和代理的阻止。

  1.3 ViewState

  ViewState 是由ASP.NET 页面框架管理的一个隐藏的窗体字段。当ASP.NET 执行某个页面时,该页面上的ViewState 值和所有控件将被收集并格式化成一个编码字符串, 然后被分配给隐藏窗体字段的值属性。使用ViewState 传递数据时可用:ViewState [" 变量名"]=数值,在取出数据时用:变量=ViewState["变量名"]。使用ViewState 的优点是:在对同一页的多个请求间自动保留值,不用服务器端资源,实现简单,视图状态中的值经过哈希计算和压缩,并且针对Unicode 实现进行编码,其安全性要高于使用隐藏域;缺点是因为ViewState 存储在页面本身,因此如果存储较大的值,用户显示页和发送页时的速度可能会减慢。虽然视图状态以哈希格式存储数据,但它仍可以被篡改。

  1.4 使用COOKIE 

  COOKIE 可以在页面之间传递少量信息, 可以存储在客户端的文本文件中,也可存储在客户端的内存中。COOKIE 方法适用于存储少量页面中经常改动的信息, 如为登陆过的网站保存登陆用户名,为用户输入提供方便,还有在一些用户自定义项目上保存用户的个性化设置。使用COOKIE传递数据时可用:Response.COOKIEs["键名"]=键值;取出数据用:变量名=Request.COOKIEs["键名"]。使用COOKIE 优点是:COOKIE 存储在客户端, 不使用服务器资源,实现简单,可配置到期时间。缺点是:可以存储的数据量比较少,由于COOKIE 并不被所有的浏览器支持,而且还可能被用户禁止或删除,所以不能用于保存关键数据。另外,COOKIE 保存的形式是简单的明文文本,在它里面不宜保存敏感的、未加密的数据。

  1.5 使用application 变量

  使用Application 变量也可以实现页面间的传值,Application变量是全局性的,所有用户共享一个Application 变量,一旦定义,它将影响到程序的所有部分。如果想在整个应用程序范围使用某个变量值Application 对象将是最佳的选择。存入数据时, 把值添加到Application 变量里:Application["变量名"]=数值;取出数据用:变量=Application["变量名"];在不需要使用该Application 时,要显式清除它:Application["量名"]=null。 
  Application 优点:易于使用,全局范围。可供应用程序中的所有页来访问。缺点:若保存数据的服务器端进程被损坏(如因服务器崩溃、升级或关闭而损坏),那么数据就会丢失,所以利用Application 一定要有保底的策略;占用服务器端的内存,这可能会影响服务器的性能以及应用程序的可伸缩性。

  1.6 使用session 变量

  Session 对象可以用来存储需要维护的指定对话的信息,不同的客户端生成不同的Session 对象。Session 用于存储特定于单独会话的短期信息。Session 的使用方法和格式与Application 相同。

  优点:易于实现,并且提供较高的安全性和持久性,可以应对IIS 重启和辅助进程重启,可在多进程中使用。缺点是耗用服务器端的内存。所以不要存储大量的信息。Session 最常见的用途是与COOKIE 一起向Web 应用程序提供用户标识功能,Session也可用于不支持COOKIE 的浏览器。但是,使用无COOKIE 的Session 需要将会话标识符放置在查询字符串中,同样会遇到本文在查询字符串一节中陈述的安全问题。

  1.7 使用类的静态属性

  这种方法是利用类的静态属性实现两个页面间的值传。定义一个包含静态属性的类;将要传送的值赋给静态属性;目标页面中可以通过静态属性获得源页面中要传的值。 
优点是可以方便传送多个数据,缺点是需要额外编程,增加程序设计的工作量,占用服务器内存。

  1.8 使用Server.Transfer

  通过Server.Transfer 方法把执行流程从当前的ASPX 文件转到同一服务器上的另一个ASPX 页面的同时,可保留表单数据或查询字符串,做法是把该方法的第二个参数设置成True,在第一个页面用Server.Transfer("目标页面名.aspx",true);目标页面取出数据用:Ruquest.Form["控件名称"]或Ruquest.QueryString["控件名称"]。Asp.net2.0 中还可以这样来用,代码如下:

?
1
2
3
PReviousPage pg1;
pg1=(PreviousPage)Context.Handler;
Response.Write(pg1.Name);

  说明: 此段代码用在目标页面中取出传递的值,Previous- Page 是原页面的类名,Name 是在原页面定义的属性, 需要传递 的数据存入到此属性中。 
  使用这种方法, 需要写一些代码以创建一些属性以便可以 在另一个页面访问它, 可以在另一个页面以对象属性的方式来 存取数值,这个方法在页面间值传递中是特别有用的,这种方法 不但简洁,同时又是面向对象的。

  1.9 Cache

  Cache 具有强大的数据操作功能, 以键值对集合的形式存 储数据,可以通过指定关键字来插入和检索数据项。它的基于依 赖性的终止功能, 使它能够精确控制如何并及时更新和消除缓 存中的数据。它可以内部进行锁定管理,不需要象Application 对象那样使用Lock()和Unlock()方法进行串行化管理。缺点是使用 方法较复杂,使用不当反而降低性能.

  2、不同页面跳转情况下可采用的传值方法

  2.1 情况一:源页面可以跳转到目标页面,源页面传递数据给目标页面

  使用查询字符串, 将少量信息从一页传输到另一页以及不 存在安全性问题时,是一个简单常用的方法;使用Server.Transfer方法,可传递表单数据或查询字符串到另一个页面,还可以 保存初始页的HttpContext, 当目标页和源页面在同一个服务器 时,可以用此方法。

  2.2 情况二:页面传递数值给自身页面

  即在对同一页的多个请求间保留值, ViewState 属性可提供具有基本安全性的功能。也可用隐藏域,存储少量回发到自身或另一页的页信息时使用,不考虑安全性问题时使用。

  2.3 情况三:源页面传递数值给目标页面,而源页面不能直接连接到目标页面。

  有多个方法,具体用哪个要看具体情况。

  Application: 存储由多个用户使用且更改不频繁的全局信息,此时安全性不成为问题。不要存储大量的信息。Session:存储特定于单独会话的短期信息,并且需要较高的安全性。不要在会话状态中存储大量的信息。需要注意,将为应用程序中每一会话的生存期创建并维护会话状态对象。在支持许多用户的应用程序中, 这可能会占用大量服务器资源并影响可缩放性。

  COOKIE: 当您需要在客户端存储少量信息以及不存在安全性问题时使用。类的静态属性,方便传送多个数据。

  Cache :对象用于单个用户、一组用户或所有的用户。可以为多个请求长时间、高效率的保存数据。上述几个方法, 不仅用于情况三, 前面两种情况都可以使用,只是没有必要时尽量少用,否则会造成资源浪费或增加程序的复杂性。


转:https://www.cnblogs.com/lmls/archive/2012/06/18/2553264.html



推荐阅读
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
  • Python 实战:异步爬虫(协程技术)与分布式爬虫(多进程应用)深入解析
    本文将深入探讨 Python 异步爬虫和分布式爬虫的技术细节,重点介绍协程技术和多进程应用在爬虫开发中的实际应用。通过对比多进程和协程的工作原理,帮助读者理解两者在性能和资源利用上的差异,从而在实际项目中做出更合适的选择。文章还将结合具体案例,展示如何高效地实现异步和分布式爬虫,以提升数据抓取的效率和稳定性。 ... [详细]
author-avatar
Sunday老师
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有