日期:2014-05-17  浏览次数:21053 次

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

这几天在学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设置超时时间
  在服务器端 sess