详解ASP.NET的四种状态

 我来答
濒危物种1718
2022-11-17 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6605
采纳率:100%
帮助的人:46.3万
展开全部

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

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

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

  形式是这样的

<input type= hidden name= _VIEWSTATE id= _VIEWSTATE value= 一些加密过的值 />

  这是 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( source special source );

Application remove( source );

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

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/201311/15574

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式