ASP.Net中的四种状态保持机制

本文档转载自http://blog.csdn.net/popping_dancer/article/details/7765464 因时间紧迫,未做个人笔记,仅参考。

这几天在学ASP.Net (就是传说中最难的东西)  上课刚听的时候的确有点听不懂 毕竟第一次接触
每天晚上回来看视频的时候 才慢慢的恍然大悟 哦~~ 原来是这么回事呀 想必大牛们当初也是这样的感觉吧 哈哈 !
今天来说说ASP.Net中的4种状态保持机制

状态保持机制?神马意思?
别急 且听我下面慢慢道来

每个人上网可多有过这样的情况   
当我们登陆某个网站时 在登陆的旁边会有一个 "记住我" 的复选框 有的网站还会让用户选择记住我几天 这个登陆时的 用户名和密码 就是一种状态
这个记住我是怎么实现的呢? 其实就用利用的是cookie 当我们 选择了"记住我"以后 浏览器会将用户名保存在浏览器的cookie中 我们下次登陆的时候 
就会自动的去找cookie了

当我们登陆网站以后 在最上面会显示 "欢迎您***" 这也是一种 状态 这个是怎么实现的呢?
这个就利用到了Session   Session是将我们登陆的用户名等信息存在服务器的内存中 这样我们就能在这个网站的任何一个页面中使用了 
当我们管理浏览器的时候 服务器内存中的Session也就找不到了

好了 就先简单的介绍到这里 下面我放上我对这4个状态保持机制的一个总计 全部是我自己的理解 都是白话 不是官方的说法 有不对的地方
还请您指出 以便我改进 万分感谢!!!

Session
 什么是Session
   是保存在服务端的一种状态 可以保存任何类型的对象

可以存储用户的信息(用户名 密码等)

只要在一个页面中创建了Session 并给Session赋值了
   那么在整个网站都可以使用

这一点和ViewState不一样 ViewState是在当前页创建了以后
  只能在当前页的任何一个地方使用

Session没有限制存储的大小 但是不建议存储大的数据 这样是为了减轻服务器压力
  (在网站中不要大量使用Session)

Session过期问题:
   当我们请求页面以后 没有对页面上任何一个对象进行操作 默认20分钟以后 会自动回收 如果这期间 对页面上任何一个对象操作了 那么 重新开始计算

Session销毁:
  Session.Abandon();//销毁服务器端的Session对象
  Session.Clear();//清空服务端的Session对象里的键值对,Session对象并没有从Session池里销毁

Session原理:
   1. 浏览器先向服务器请求页面 并返回给浏览器 显示页面空间
   2. 点击提交(发送post请求) 服务器发现有session代码 这个时候 开始在服务器内存中创建session
   3. 在服务器内存中 有一个叫session缓冲池的地方 专门用来存储session
    这个时候 (先检查session池中有没有当前浏览器的session对象 如果没有的话 才会在session池中创建对象)
   4. 有一个重定向Response.Redirect()  此时 Location要跳转的页面返回 和 将SessionID以cookie的形式返回给浏览器 (在set-cookie中存放的返回的sessionId)
   5. 返回浏览器以后 浏览器带着刚刚传过去的sessionID  以cookie的形式 再次回到服务器端 回到重定向的那个页面 
   6. 然后 根据传过去的sessionId在session池中查找对应的session值

注意:
  在请求管道的第9个事件中 专门负责从请求报文中获得sessionId的值  然后从session池中找到对应的值 然后将找到的值的引用 交给当前页面的session属性
   因为page_Load是在生命周期中触发的 生命周期是在第11和第12个事件之间触发的 所以 我们在page_Load中可以直接使用session的值 因为在之前的第9个事件中已经被赋值了

Session设置超时时间:
  在服务器端 session如果不操作 默认保存20分钟 如果想修改 可以设置
  Session.Timeout=60; // 60是分钟

使用session注意的地方:
  在一般处理程序中使用session 必须实现
   IRequiresSessionState 接口 
   这个接口是一个标示接口 里面有任何方法 因为在请求管道的第九个时间中要根据sessionId去session池中找对应的值 要先判断时候实现了这个接口 所以 使用一般处理程序的时候 必须继承
   在一般处理程序中创建session
    HttpContext.Current.Session["name"] = name;

在aspx文件中不用添加 应为defalt类中继承了这个接口

Ccokie
 什么是Ccokie:
   Cookie服务器向浏览器写出的 然后浏览器保存起来 下次浏览器访问当前网站的时候 浏览器不经过服务器同意  自动的将cookie读出来 发送给服务器
   
   
 Cookie的path属性:
  如果给path属性赋值=“WebForm/amin” 那么 只有访问admin目录下的这个页面的时候才把cookie从服务器写到浏览器中 默认选择的根目录 就是访问哪个页面也会将cookie从服务器写到浏览器
  
 Cookie原理:
  1. 浏览器先向服务器请求页面 并返回给浏览器 显示页面控件(前提是页面上必须有创建cookie的代码)
  2. 当浏览器向服务器发出post请求以后 服务器发现所请求的页面带有cookie的代码 然后 服务器在响应报文中的响应体中包含的cookie的创建信息(set_cookie…….. 如果为cookie设置的过期时间 那么 还包含过期时间信息)
  3. 返回浏览器以后  根据响应报文 创建cookie (没有设置时间就创建在浏览器内存中 设置了就创建在浏览的对应的磁盘中)
  4. 此后 浏览器每次访问该网站的页面时  都会带的cookie信息 一起访问

Cookie保存的两种方式:

1.  浏览器内存  当我们没有为cookie设置保存时间的时候 cookie就被保存在当前浏览器内存中关闭浏览器以后 cookie也就不存在了

2.   浏览器所指定为本次磁盘中  当我们为cookie设置了保存时间以后 cookie就保存在了当前浏览器的指定目录中知道所设定的时间到期以后 cookie会自动销毁(即使设定了1秒也会保存在本次磁盘中)

ViewState(ASP.Net中特有的)
 什么是 View State:
   ASP.NET 的 .aspx页面特有,页面级的;
   就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式 View State是.net中特有的

使用View State:(View State必须借助与一个隐藏域提交表单)
  在使用是 必须是服务端控件 (必须在form中添加 runat=sever)
  // 创建一个 View State 并赋值
        ViewState["value"] = 123;
 
 View State运行原理:
  1. 客户端想服务端请求一个带有View State[value]的页面
  2. 当服务端检测到带有View State[value]时 客户端返回时  会将名称叫value(value的自定义的)的View State的值保存到__VIEWSTATE中(在页面的生命周期中 通过SavaState事件中的SavaAllState方法 将View State[value]值经过base64编码等序列化操作 最后才保存到__VIEWSTATE的value中)
  3. 当点击提交时 会将__VIEWSTATE这个隐藏域提交到服务端(在页面的生命周期中 通过LoadState事件中的LoadAllState方法 将__VIEWSTATE的值 经过base64反编码操作以后 重新赋给View State[value] )

4. 服务器在接收到用户请求一个页面后,会自动在请求报文中找看是否包含__VIEWSTATE的隐藏域,如果有,则将中间的值解码后添加到页面的ViewState属性中。
  5. 服务器在输出的时候,也会自动的将ViewState中的值添加到表单里名叫__VIEWSTATE的隐藏域中。

View State其他:
   1. View State适用于在同一个页面 不关闭的情况下多次与服务器交互
    禁用View State以后(EnableViewState="false") text等表单控件不受影响 div、span等显示标签受影响
    因为text等都是表单标签 不管禁用不禁用都会提交 
    而div、span的标签不是表单元素 如果没有View State产生的隐藏域保存它的值 它是不会提交到服务端的

Application
  Application对象可以存储应用程序级的数据。
  “Application”:应用程序
  第一个用户访问站点时,应用程序启动,并创建一个Application对象。
  创建成功后,整个应用程序中都可以使用该对象。
  除非应用程序关闭,否则对象一直存储在内存中。
 
  他和session一样 也是保存在服务器内存中的 唯一不同的是 所有的用户都能使用他 他是公共的 不像session那样为每一用户都分配一个session 所有 可以用Application统计某个站点的访问量

时间: 2024-08-03 07:08:21

ASP.Net中的四种状态保持机制的相关文章

css中按钮的四种状态

css中按钮有四种状态 1. 普通状态2. hover 鼠标悬停状态3. active 点击状态4. focus 取得焦点状态 .btn:focus{outline:0;} 可以去除按钮或a标签点击后的蓝色边框 下面的例子中.btn1用focus按钮会按下,不弹起 .btn2用active按钮点击按下,会弹起 <button class="btn btn1">Save Settings</button> <button class="btn bt

详解ASP.NET4 GridView的四种排序样式

与ASP.NET 的其他Web控件一能够,Gridview控件拥有很多不同的CSS样式属性设置,包括象CssClass,Font字体,ForeColor,BackColor,BackColor, Width, Height等等.Gridview还包括了一些应用在表格的行上的样式属性,比如RowStyle, AlternatingRowStyle, HeaderStyle,和PagerStyle,它们都提供了象CssClass和Font这些基本的属性设置. 在ASP.NET 4.0中的Gridvi

&gt;hibernate的四种状态

hibernate的四种状态 1.临时状态 与数据库中没有相对应的数据,也不在session的管理之中,一般是新new出来的对象 2.持久化状态 对象在session的管理中,最后会在事务提交后,在数据库中有相对应的记录 该状态有两个特点①有OID      ②对对象的修改会同步到数据库中 3.游离状态 数据库中有相对应的记录,该对象不再session的管理中,修改此对象时,该数据库不会有变化 4.删除状态 执行了delete()方法的对象,最后被回收

Java多线程(4)----线程的四种状态

与人有生老病死一样,线程也同样要经历开始(等待).运行.挂起和停止四种不同的状态.这四种状态都可以通过Thread类中的方法进行控制.下面给出了Thread类中和这四种状态相关的方法. 1 // 开始线程 2 public void start( ); 3 public void run( ); 4 5 // 挂起和唤醒线程 6 public void resume( ); // 不建议使用 7 public void suspend( ); // 不建议使用 8 public static v

HTML5样式和列表、CSS链接的四种状态

一.HTML5样式 1.标签: <style>:样式定义: <link>:资源引用: 2.属性: type="text/css":引入文档类型: rel="stylesheet":外部样式表: 3.三种样式表插入方法: (1)外部样式表: 在<head></head>中写入: <link  rel="stylesheet"  type="text/css"  href=&q

java线程四种状态

一个线程可以有四种状态: 1.新(new), 即线程刚刚创建,而并未执行 2.可运行(runnable),意味着一旦时间分片机制有空闲的CPU周期提供给一个线程,那个线程便可立即开始运行.因此,线程可能在.也可能不在运行当中,但一旦条件许可,没有什么能阻止它的运行——它既没有“死”掉,也未被“堵塞”. 3.Dead,从自己的run()方法中返回后,一个线程便已“死”掉.亦可调用 stop()令其死掉,但会产生一个违例——属于Error的一个子类(也就是说,我们通常不捕获它).记住一个违例的“掷”

ASP.NET中的几种弹出框提示

B/S不像C/S那样一个MessageBox就可以弹出提示框,不过可以通过js的“Alert”来弹出消息,或者通过一些变种的js方法.下面我给大家介绍几种,希望大家喜欢. 四种弹出框代码: protected void Message_Click(object sender, EventArgs e) { //第一种 Response.Write("<script language=javascript>alert('第一种弹出框');</" + "scri

ASP.NET MVC中有四种过滤器类型

在ASP.NET MVC中有四种过滤器类型 Action 1.在ASP.NET MVC项目中,新建文件夹Filter,然后新建类MyCustormFilter,继承自ActionFilterAttribute类,我们来看下ActionFilterAttribute类有如下四个方法,从命名我应该就可以看出他们的执行时机. public class MyCustormFilter:ActionFilterAttribute { public override void OnActionExecuti

Activity中的四种启动模式

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Android总Activity的启动模式分为四种: [html] view plaincopy Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard"