壮态管理
当用户在发送一个请求关得到返回信息之后,客户端与服务器端之间的网络连接就已经
断开了,在下一个请求发送时,服务器无法确定这次请求和上次的请求是否来自同一个客
户端。也就是说,服务器不能记住"记住"用户,这是hptp协议的限制。(http协议是无状态的)在web应用程序中,
实际上是经常需要记住每次请求的。那么,如何让服务器知道不同的请求是否来自同一个
客户端,就是状态管理问题出现了session和cookie。
状态管理
分为客户端和服务器端
服务器端:状态信息保存在服务器端,session (其它:Application,HttpContext,Cache
)
客户端:状态信息保存在客户端,cookie (QueryString,ViewState,ControlState,隐藏域
)
当客户端向服务器发送请求时,状态信息也随之发送到服务端,从而起到验证客户端来路
的目的。
客户端状态不如服务器端的安全性和可靠性高,但服务器端状态会占用服务器端资源,影
响服务器性能。
Session session超过之前 数据大小不限,建议数据尽量少
cookie 可编程控制 数据受cookie大小限制
具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮
机制,他需要用户打开客户端的cookie支持。
而session机制采用的是一种在客户端与服务器之间保持状态的解决方案。同时我们也看到
,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能
需要借助于cookie机制来达到保存标识的目的。而session提供了方便管理全局变量的方式
session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个
用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用
cookie时,这个值也可能设置为由get来返回给服务器。
就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,
建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行
特殊的指示以提示浏览器按照指示生成相应的cookie
从网络服务器观点看所有HTTP请求都独立于先前请求。就是说每一个HTTP响应完全依赖于
相应请求中包含的信息
状态管理机制克服了HTTP的一些限制并允许网络客户端及服务器端维护请求间的关系。在
这种关系维持的期间叫做会话(session)。
Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF
RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向
客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件
,它会自动将同一服务器的任何请求缚上这些cookies