http的无状态以及常用的状态保持方式

 

无状态的根本原因是:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。

应用层面的原因是:浏览器和服务器之间的通信都遵守HTTP协议。

因此,不能将状态信息报讯在类变量中。

 

常用的状态保持方式

1、ViewState:

  asp.net的 .aspx页面特有的,页面级的;

  就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式;

  服务器端控件的值都自动保存在ViewState中;

  1.1 使用方法:作用域--->页面级

    保存数据方式:ViewState["keyword"]="data";

    读取数据方式:string data=(string) ViewState["keyword"];(---->不能为空---->!=null)

  1.2 前提:页面上必须有一服务器端标记即<form runat="server">

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

  1.4 ViewState适用于同一页面在不关闭的情况下的多次与服务器交互,跨页面提交的_ViewState 不会被目标页面装载进页面的ViewState属性中。

  

2、Cookie:

  HTTP协议下的一种方式,通过该方式,服务器或脚本能够在客户端上维护状态信息;

  就是在客户端保存客户端单独使用的数据的一种方式;

  就像病人的病历本一样,医院可以直接让病人带回家;

  

3、Session:

  在服务端保存客户端单独使用的数据的一种方式;

  就像银行账户,钱都存在银行里,你就拿一张银行卡回家;

  Session机制的asp.net内置的;

  不能放太多的对象到Session里,因为存储在服务器端的一个辅助线程里并不稳定,数据多了就容易丢失,Session一旦超时销毁,那么里面的数据就一定无法恢复,这是微软官方说的一个无法避免的bug。。。所以一般只是把SessionID的值存放在Session中,而ID的值会以 cookie 的方式 返回给浏览器。

---------------------------------------------小分割线---------------------------------------

  Cookie与Session

  Cookie是存放在客户端,Session是存在服务器端,目的是一样的,即是保存和当前客户端相关的数据,另外,当前网站的任何一个页面都能取到Session、Cookie。Session发的数据是object类型。如果浏览器禁用了Cookie,可以启用URL来传送SessionID。

 

4、Application(并不常用):

  在服务端保存共享数据的一种方式;

  就像单人的公共卫生间,谁都可以进去,但每一次只能进去一个,并把门锁上,出来之后再把锁打开;

  第一个用户访问站点时,应用程序启动,并创建一个Application对象;

  创建成功之后,整个应用程序中都可以使用该对象,除非关闭应用程序,否则对象一直存储在内存中。

 

资料来源:课堂总结或笔记。

 

posted @ 2011-07-27 21:15  Nereus_37  阅读(2400)  评论(0编辑  收藏  举报