聚集网(jujiwang.com) - 收录免费分类目录信息软文发布网址提交
免费加入

ASP.NET ViewState 与其他状态管理技术的比较:洞察其优劣势 (asp.net)

文章编号:10555时间:2024-09-28人气:


ASP.NET

简介

在 ASP.NET Web 应用程序中,状态管理对于维护页面上的用户输入和应用程序状态至关重要。ViewState 是 ASP.NET 框架内置的一项状态管理技术,允许开发人员跨回发保存和恢复页面控件状态。它并不是唯一可用的状态管理选项。其他技术,如服务器变量、隐藏字段和控件状态,也用于管理 Web 应用程序状态。本文将对 ASP.NET ViewState 与其他状态管理技术进行详细比较。我们将探讨每种技术的优势和劣势,以帮助您确定适合您特定应用程序需求的最佳解决方案

ViewState

ViewState 是一种服务器端状态管理技术,可自动保存和恢复页面控件状态。它通过将控件状态编码为隐藏字段,并将其包含在页面 HTML 中来实现。

优点:

自动状态维护:ViewState 自动处理页面控件状态的保存和恢复,减轻了开发人员的负担。跨回发持久性:ViewState 允许在页面回发期间保留控件状态,使开发人员能够维护用户输入和其他应用程序数据。跨控件访问:ViewState 中存储的状态可供页面上的所有控件访问,这对于协调控件之间的交互非常有用。

缺点:

性能开销:ViewState 可能会导致较大页面大小和较慢的页面加载时间,因为它将控件状态存储在隐藏字段中。安全漏洞:ViewState 数据容易受到脚本攻击,因为它在客户端以纯文本形式传输。复杂性:ViewState 的实现可能很复杂,难以调试和维护。

服务器变量

服务器变量是一种服务器端状态管理技术,它使用服务器内部对象来存储和检索状态信息。

优点:

高性能:服务器变量不需要额外的数据传输,因此不会影响页面大小或加载时间。安全:服务器变量数据存储在服务器上,因此不易受到脚本攻击。

缺点:

控件状态,提供了不同的功能和权衡取舍。通过了解每种技术的优点和缺点,您可以选择最适合您特定需求的最佳状态管理解决方案。通过精心地选择和使用状态管理技术,您可以开发响应迅速、安全、维护良好的 ASP.NET Web 应用程序。

asp.net三层架构与asp.net MVC各自的区别,各自应该应用在什么场合,在什么情况下用三层,什么情况下用MVC

你想知道它们用在什么场合,首先要了解它们的优点和缺点,三层架构:统的开发中,微软的开发团队为开发者设计了一个在可视化设计器中拖放控件,编写代码响应事件的快速开发环境。 然而,它所带来的负面效应是:由于控件封装了很多东西,开发者很难了解这背后的HTML是如何运作的容易得到一个包含大量ViewState的页面,使得页面尺寸远远超过所需的内容,使得页面的打开速度较慢不容易被测试。 :没有数据回传没有在页面中保存视图状态开发者可以完全掌控页面的呈现过程易于单元测试易于测试驱动开发,可扩展、可替换!是一个基于MVC模式的开发框架,而三层架构是一种架构。 它们可以在概念上区别开来,也就是说它们各有各的好,不能把代替三层架构,反过来也不行!如果要做大型应用开发的话,我建议使用!

asp.net mvcASP.NET MVC特色与优点

MVC框架基于Model-View-Controller(MVC)设计模式,为Web应用开发提供了新的解决方案。 它将复杂的Web项目分解为三个主要部分:Model(数据模型)、View(用户界面)和Controller(控制器),这有助于提高维护性和减少项目间的耦合,使开发更为灵活和模块化。

MVC的优势在于:

相比之下,WebForm的优点包括:

详解ASP.NET的四种状态

这些状态的原理对于做 NET开发非常重要 现在详细解说一下

视图状态 视图状态就在大家身边不知道大家是否注意 ASP NET是基于服务其处理事件的 当服务器处理完事件时 再返回本窗体时 如果没有视图状态 原来的数据将不会在有 这样说也许会晕 举个列子 比如有一个网站需要你注册成为会员 当你填完信息 (一般来说页面会转向别的地方)这里为了说明问题 我们让他返回原来的页面继续操作 如果没有视图状态 则你以前填的数据都没有了 如果有视图状态 则原来的数据还在 试图状态在一些时候很有用 比如说分级验证时

那么 NET是用什么方法保持试图状态呢?这里微软采用了一种特殊的方法 在浏览器打开网页的源代码 你会发现一段你在编辑网页时 没有添加的一个HTML控件

形式是这样的

这是 NET自动给你添加的 它也是视图状态能够实现的功臣 因为这个空间是隐藏的 所以不会破坏页面的布局 空件中的value中的值就是就是各个空件以及控件中的数据(状态) 这些数据是经过哈希函数加密过的 这是为了安全考虑 当网页提交时 浏览器首先将当前网页中的各种状态(包括控件以及控件中的数据)保存到这个HTML字段中 当网页再次返回浏览器时 在自动把这些状态返回给网页 这样网页也就恢复了状态

再来讲讲视图状态需要注意的问题

视图状态只能在本网页与服务器之间保持 不能在不同网页之间连接时保持 默认情况下 几乎所有的ASP NET控件都有保持视图状态的功能

视图状态有很多优点 但同样(世上每件事都具有两面性 一个好的技术也不列外)有些缺点 首先是安全 虽然数据是经过加密 但对于黑客中的骨灰级人物 还是很不安全的 再次 你可以想如果你的页面包括几百条记录 页面很复杂 这是必会影响网页的加载速度

应用程序状态(Application): Application对象是应用程序的全局性对象 用于存放应用程序的全局共享资源 他的本质是HTTPApplicationState类的一个实例 当用户第一次反问某虚目录中的资源时 就被创建 也就是说网站第一次在互联网上发布 这时有一个用户刚好访问你的虚拟目录资源 那么Application对象就已经建立 在资源与应用程序之间建立了一个缓冲区

应用程序状态只有在网站运行时存在 当应用程序推出或服务器关闭时(更惨一点服务器崩溃了) 应用程序状态中保存的数据机会丢失和损坏 所以对于需要永久保留的资源还是在数据库中持久化保存的好

介绍一些Application对象的一些操作方法

Application对象当然是采用最经典的 键 值 对的字典方法来定义 其中键为字符串代表Application对象的名称 值可以是任何类型的数据 (例如HTML CSS SQL都可以) 举个例子

Application[source]=special source;

string message =Application[ source ] ToString();

在Application中添加删除保存的对象

Application Add( sourcespecial source );

Application remove( source );

来一个狠一点的操作 把Application中的对象全部请出去

ViewState

Application Clear();

或Appication RemoveAll();

信息共享自然会引来一个问题 资源的同步竞争 这类问题解决当然要靠锁了

Applicatin Lock()//加锁锁定资源 不让其他进程访问

functions(Application[ source ]);//一些操作Application对象的操作

Application UnLock();//解除锁定

会话状态(Session): Session对象用来保存单个用户的状态 在网站中 每个新访问的用户都将产生自己的会话(Session)对象 这个Session对象是在服务器端进行管理 只能为它所绑定的用户服务 如果另一位用户也访问网站 他也经拥有自己的Sesiion对象 两个用户的Session对象即使同名 也不能共享同一个Session对象 各是各的

实际上Session对象是HttpSessionState类的实例 有很多属性和方法 大家不妨去看看 这里不阐述了

就一些例子吧

Session[ source ]= special source ;string message =Session[ source ] ToString();

应用程序状态在网站中总是可用的 这 NET Framework的内部机制 我们不去管 我们来看看Session对象 由于在Machine config配置文件中的Session设置是启动的 因此不需要额外的步骤就能使用它 尽管如此我们还是要知道一些原理和本质 Machine config和应用程序的Web config中的设置决定了是启动还是关闭Session对象 当然如果想要延迟到需要时 在启用也可以 我们可以在页面一级设置

//这条语句的作用是在这个页面中不能使用会话状态(Session)

Session对象有一个Timeout属性可以设置Session对象的生命周期 它以分钟为单位 默认是分钟 如果再有效时间内没有连接服务器 那么Session的所有设置都将失效 如果需要终止Session对象 可以用它的Abandon()方法

差点忘了 Session有一点很重要 补充一下

session中的关键字是不区分大小写的 因此不要用大小写来区分Session变量 也就是说Session[ source ]与Session[ SOURCE ]是一样的 如果删掉其中一个 会有意想不到的结果

Cookie状态:Coolkie 状态一是用来保存一个用户资源的状态 和Session不同的是它存储在浏览器端 在Cookie中只能含有较少的信息 通常不超过个字节(有些较新的浏览器可以达到个i字节) 在ASP NET中 Session对象和Cookie对象现结合来识别用户 每当用户开始连接站点时 系统将自动在内存块中创建一个和用户有关的Session对象 同时创建一个Cookie对象来保存用户ID并把它保存在浏览器端 与当前的用户唯一的联系起来 这样当用户下一次在访问时 用户被要求提交用户的TD也就是CooKie Cookie和Session相对照以正确的还原原来的会话状态 这就是无状态协议Http条件下保持用户状态的方法

向浏览器写入Cookie的方法是这样的 举个例子

HttpCookie cookie=new HttpCookie(userNameId);//创建一个Cookie对象并且赋值

cookie Value= userNameId //如果已经存在一Cookie 也可以这样给它赋值

cookie Expires=DateTime Now+TimeSpan;//设定cookie的生命周期

这里的TimeSpan是TimeSpan类的一个实例 cookie的默认时间是分钟

Response Cookies Add(cookie);//向浏览器中写入Cookie

HttpCookie cookie =Request Cookies[ cookie ];//读取Cookie

lishixinzhi/Article/program/net//

[爬虫踩坑]ASP.NET网页上的ViewState和EVENTVALIDATION(还有应对的翻页顺序)

最近在爬一个叫做雅学资讯网的网站的时候,在翻页的时候发现翻不动,做翻页请求时会报错。 仔细查了以下发现跟ViewState和EVENTVALIDATION两个东西有关。 (两个值的具体用法我写在最后,如果光为了解决爬虫问题可能不需要对这两个值有太深的理解,所以我先写下爬虫应该如何应对)

在页面上我们可以找到这么一段div,其中value的值便是当前页面的ViewState

下面这一段是EVENTVALIDATION的

简单来说我们把这个页面的html解析获取这两个值,然后在执行post请求时加到PostData属性里就可以了。 但是 在翻页的时候可能还会有一个坑,我们有时会需要子页面中的内容。 这个时候子页面爬取的顺序就有点讲究了。 正确顺序在第三部分,不需要看我踩坑过程的直接看第三部分。

如果我们按照下图这样的顺序,会发现我们在第一页子页c跳转到第二页的时候会失败。

按照本身应该的一页跳二页,二页跳三页的顺序爬取(先不管子页面),再爬每一页时存储好该页的Html或者跳转子页面的信息,先把所有父页面爬好,再根据本地的信息爬所有子页面。

当请求某个页面时,把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端。 当客户端把页面回传时,分析回传的窗体属性,并赋给控件对应的值。

“id”属性为“__EVENTVALIDATION”的隐藏字段是 2.0的新增的安全措施。 该功能可以阻止由潜在的恶意用户从浏览器端发送的未经授权的请求. 为了确保每个回发和回调事件来自于所期望的用户界面元素,运行库将在事件中添加额外的验证层。 服务器端通过检验表单提交请求的内容,将其与“id”属性为“__EVENTVALIDATION”隐藏字段中的信息进行匹配。 根据匹配结果来验证未在浏览器端添加额外的输入字段(有可能为用户在浏览器端恶意添加的字段),并且该值是在服务器已知的列表中选择的。 运行库将在生成期间创建事件验证字段,而这是最不可能获取该信息的时刻。 像视图状态一样,事件验证字段包含散列值以防止发生浏览器端篡改。

asp.net很多控件的viewstate不知有什么用,感觉莫名其妙

洞察其优劣势

文本框的内容不是保存在ViewState的,而是在表单里,禁用下看看就知道了...最没用的viewstate一般是显示消息的Label,因为每次的消息都不一样,保存上次的毫无意义一般最需要ViewState的是数据绑定控件,一个回发就空了只要你的页面没有回发,就可以禁用ViewState,因为viewState本来就是为了保证页面回发的时候有状态的假象,再大多数情况下,为了减少服务器和客户端交互的,能不用就不用。当然现在很多网站上页面的操作使用ajax,那就更不需要ViewState了,如果一块区域就不需要更新,又何必维持它的状态呢



相关标签: ViewStateasp.net洞察其优劣势ASP.NET与其他状态管理技术的比较

上一篇:ASPNETViewState的未来探索不断发展的Web开

下一篇:优化ASPNETViewState性能加速网页加载时间

内容声明:

1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违法信息,如您发现违法内容,请联系我们进行举报处理!
4、本文地址:http://www.jujiwang.com/article/c2e102fd21ed69cc435f.html,复制请保留版权链接!


温馨小提示:在您的网站做上本站友情链接,访问一次即可自动收录并自动排在本站第一位!
随机文章
AssemblyInfo 的高级用法:自定义命名空间、主键和签名 (assembled in china是什么意思)

AssemblyInfo 的高级用法:自定义命名空间、主键和签名 (assembled in china是什么意思)

AssemblyInfo文件是一个专门的文本文件,用于定义程序集的信息,例如其名称、版本、文化和支持的操作系统,它还包含一些高级选项,允许您自定义程序集的命名空间、主键和签名,自定义命名空间默认情况下,程序集的命名空间是由编译器生成的,通常是基于项目文件夹的名称,但是,您可以使用[assembly,InternalsVisibleTo...。

本站公告 2024-09-28 17:00:20

activiti建模与部署教程:从BPMN流程图到可执行工作流 (activities)

activiti建模与部署教程:从BPMN流程图到可执行工作流 (activities)

简介Activiti是一个开源的业务流程管理,BPM,和工作流引擎,它允许您建模、部署和管理复杂的业务流程,本教程将指导您完成使用Activiti从BPMN流程图创建可执行工作流的过程,先决条件安装Activiti安装BPMN建模工具,例如,CamundaModeler,了解BPMN基本符号步骤1,建模BPMN流程使用BPMN建模工具...。

本站公告 2024-09-26 21:44:20

掌握 CSSHover 的艺术:从基础到高级指南 (掌握css要用多久)

掌握 CSSHover 的艺术:从基础到高级指南 (掌握css要用多久)

什么是CSSHover,CSSHover是CSS中的一种伪类,用于在元素上悬停鼠标时触发样式更改,它允许您创建交互式和具有吸引力的元素,从而增强用户体验,基础例子点击我```当您将鼠标悬停在按钮上时,按钮的背景色将更改为深蓝色,触发事件`hover`伪类在以下情况下触发,当鼠标指针进入元素区域时当鼠标指针在元素区域内移动时当鼠标指针离...。

本站公告 2024-09-24 23:00:43

从头开始理解 LoadLibrary 失败:深入探究 DLL 加载机制和故障排除 (从头开始理解的成语)

从头开始理解 LoadLibrary 失败:深入探究 DLL 加载机制和故障排除 (从头开始理解的成语)

简介LoadLibrary是Windows中一个重要的API函数,用于加载动态链接库,DLL,由于各种原因,LoadLibrary可能会失败,导致应用程序无法正常运行,本文旨在深入探究LoadLibrary的加载机制,并提供故障排除策略,帮助开发人员解决DLL加载失败问题,LoadLibrary加载机制LoadLibrary函数通过...。

最新资讯 2024-09-24 13:18:42

mkdir 101:初学者指南,创建目录变得轻松

mkdir 101:初学者指南,创建目录变得轻松

目录概述在计算机科学中,目录,又称文件夹,是用于组织和存储文件和子目录的逻辑构造,每个目录都有一个父目录,除了根目录之外,mkdir命令是一种在系统中创建目录的命令行工具,它在各种操作系统和环境中常用,如Linux、macOS和WindowsPowerShell,mkdir命令语法mkdir命令的语法如下,mkdir[选项]目录名其中...。

互联网资讯 2024-09-16 06:27:38

选项 2 (选项2英文)

选项 2 (选项2英文)

03e较困难歧义性可能导致歧义不太容易导致歧义文化遗产可能导致文化遗产丧失保留了更多的文化遗产沟通障碍可能导致沟通障碍不太容易导致沟通障碍结论简体中文是一种广泛使用的语言,具有其自身的优点和缺点,在选择使用简体中文还是繁体中文时,重要的是要权衡这些优点和缺点,并做出对自己最合适的决定,...。

最新资讯 2024-09-13 20:05:43

掌握移动开发的基石:适用于手机的 C 语言 (掌握移动开发技术的人)

掌握移动开发的基石:适用于手机的 C 语言 (掌握移动开发技术的人)

象特性,Swift,Swift是一种现代且高效的面向对象编程语言,越来越受iOS开发人员的欢迎,它建立在C语言的基础上,并提供了更高级别的抽象和更简单的语法,学习C语言学习C语言需要坚实的编程基础和对计算机科学概念的理解,以下是学习C语言的一些实用指南,从入门教程开始,有许多在线和书籍资源提供C语言的入门教程,它们将介绍语言的基本语法...。

本站公告 2024-09-13 12:56:10

导航的艺术:隐藏式导航如何提升网站用户参与度 (导航的含义)

导航的艺术:隐藏式导航如何提升网站用户参与度 (导航的含义)

导航的含义导航是一个网站的重要组成部分,它允许用户在不同的页面之间进行浏览,好的导航应该清晰、易用,并使用户能够快速找到所需的信息,传统上,导航位于网站页面的顶部,采用水平或垂直菜单的形式,近年来,一种新的导航趋势出现了,隐藏式导航,隐藏式导航是指将导航元素隐藏在菜单图标或其他元素后面,只有当用户将鼠标悬停在该元素上或点击它时,导航才...。

本站公告 2024-09-11 21:27:05

小程序支付回调安全注意事项:防范恶意请求和数据泄露 (小程序支付回调不成功的原因)

小程序支付回调安全注意事项:防范恶意请求和数据泄露 (小程序支付回调不成功的原因)

小程序支付回调是实现小程序支付流程的重要环节,在实际开发中,开发者需要重视支付回调的安全问题,防范恶意请求和数据泄露,保障用户资金和业务的安全性,1.验证请求合法性在处理支付回调请求时,开发者需要首先验证请求的合法性,主要包括以下方面,签名验证,验证请求中携带的签名是否与开发者预先计算的签名一致,防止恶意篡改,IP白名单,限制只有指定...。

技术教程 2024-09-11 01:34:09

成为C语言编程大师:下载免费PDF,提升你的技能 (c语言编程能做什么)

成为C语言编程大师:下载免费PDF,提升你的技能 (c语言编程能做什么)

成为C语言编程大师提升技能,把握机遇C语言作为一种低级编程语言,在计算机科学领域发挥着至关重要的作用,它以其可移植性、高效性和对硬件的低级访问而闻名,精通C语言可以为你的职业生涯打开一扇大门,让你有机会在各个行业工作,免费下载C语言PDF为了帮助你踏上成为C语言编程大师的旅程,我们提供了一份免费的PDF指南,其中包含以下内容,C语言...。

互联网资讯 2024-09-09 10:26:28

展示您的品牌专业性:使用定制的公司网站源码 (展示您的品牌英文)

展示您的品牌专业性:使用定制的公司网站源码 (展示您的品牌英文)

使用定制的公司网站源码展示您的品牌专业性介绍在当今竞争激烈的数字环境中,拥有一个专业且引人入胜的网站对于您的品牌的成功至关重要,定制的公司网站源码使您能够建立一个反映您品牌独特性的网站,增强您的在线形象并提升您的业务,定制网站源码的好处定制网站源码提供多种好处,包括,独一无二的设计,根据您的品牌标识和目标受众创建定制设计,让您的网站脱...。

互联网资讯 2024-09-05 20:05:58

汶川大地震的超自然阴影:灵异现象之谜 (汶川大地震的电影叫什么)

汶川大地震的超自然阴影:灵异现象之谜 (汶川大地震的电影叫什么)

2008年5月12日,一场8.0级大地震袭击了中国四川省汶川县,这场毁灭性的灾难夺走了69,000多人的生命,使数百万民众流离失所,据报道,在这场悲剧之后,出现了许多奇怪且无法解释的现象,这些现象引起了人们对超自然力量存在的猜测,幽灵般的呼救声地震发生后,幸存者和救援人员报告听到了来自废墟下的幽灵般的呼救声,这些声音似乎是求助者的声音...。

互联网资讯 2024-09-04 01:44:08