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

来源:互联网 发布:南京大学网络 编辑:程序博客网 时间:2024/05/22 03:53

这几天在学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统计某个站点的访问量

 

 

(作者注释:由于我的笔记是.doc格式的 所有的标题都有超链接以及标题颜色 如果直接复制过来的话会有格式不支持的情况 为了统一 我在全部转换成了txt 所以会没有颜色 希望大家见谅)


原创粉丝点击