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

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

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

 

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

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

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

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

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

Session过期问题:
session的过期时间是从session不活动的时候开始计算,如果session一直活动,session就总不会过期,从该Session未被访问,开始计时; 一旦Session被访问,计时清0;Session的默认失效时间是30分钟,

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值

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统计某个站点的访问量

 

 

猜你喜欢

转载自www.cnblogs.com/chrisghb8812/p/9251444.html