http的无状态以及常用的状态保持方式
2011-07-27 21:15
176 查看
无状态的根本原因是:浏览器与服务器是使用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对象;
创建成功之后,整个应用程序中都可以使用该对象,除非关闭应用程序,否则对象一直存储在内存中。
资料来源:课堂总结或笔记。
应用层面的原因是:浏览器和服务器之间的通信都遵守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对象;
创建成功之后,整个应用程序中都可以使用该对象,除非关闭应用程序,否则对象一直存储在内存中。
资料来源:课堂总结或笔记。
相关文章推荐
- 无状态http和常用状态保持方式
- 黑马程序员__常用状态(信息)保持方式
- XMLHttpRequest对象的几种状态和几个重要属性以及常用的方法
- 常用的状态(信息)保持方式(重点)
- 常用的状态(信息)保持方式(重点)
- ASP.NET 之四大常用状态(信息)保持方式
- 【状态保持】Cookie解释以及原理分析
- RocketMQ专题2:三种常用生产消费方式(顺序、广播、定时)以及顺序消费源码探究
- AppDelegate.m中的常用的方法介绍,以及ios程序的状态
- Spring面向切面编程的三种方式以及常用相关案例总结
- axis1.4 wsdd 方式发布webservice 服务配置文件以及常用的DOS执行语句
- jax-rs(Java API for RESTful Web Services) 实践教程 之四 —— @Context注入HttpServletRequest 使REST保持状态!
- HTTP状态代码以及定义(深度好文,赶紧收藏)
- HTTP 1.1状态代码以及它们对应的状态信息和含义
- HttpClient加JSON保持登陆状态浏览知乎
- PHP输出http状态码以及常用状态码
- ASP.NET中Session的状态保持方式
- http协议的状态保持
- C工程的组织方式(头文件的功能)以及Linux下常用的头文件的作用
- 内核知识第七讲,内核中设备常用的三种通信方式,以及控制回调的编写