详解ASP.NET的四种状态
这些状态的原理对于做 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