某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息。
HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的,浏览器的每一次请求都是完全孤立的。
WEB服务器端程序要能从大量的请求消息中区分出哪些请求消息属于同一个会话,即能识别出来自同一个浏览器的访问请求,这需要浏览器对其发出的每个请求消息都进行标识,属于同一个会话中的请求消息都附带同样的标识号,而属于不同会话的请求消息总是附带不同的标识号,这个标识号就称之为会话ID(SessionID)。
会话ID可以通过一种称之为Cookie的技术在请求消息中进行传递,也可以作为请求URL的附加参数进行传递。会话ID是WEB服务器为每客户端浏览器分配的一个唯一代号,它通常是在WEB服务器接收到某个浏览器的第一次访问时产生,并且随同响应消息一道发送给浏览器。
会话过程由WEB服务器端的程序开启,一旦开启了一个会话,服务器端程序就要为这个会话创建一个独立的存储结构来保存该会话的状态信息,同一个会话中的访问请求都可以且只能访问属于该会话的存储结构中的状态信息。
Web服务器跟踪客户的状态通常有4种方法:
使用servlet
API的Session机制
使用持久的Cookie对象
使用URL重写机制
使用隐藏的表单域
1. 理解HTTP协议的无状态特性
协议记住用户及其请求的能力称为状态(state)。
按这个观点,协议分成两种类型:
1)有状态的
2)无状态的
HTTP协议是一种无状态的协议
对服务器的每个请求和相应的响应都是作为一个分离的事务处理。
连接过程:
客户发出请求,服务器找到资源,向客户发送响应,然后断开连接.
客户再次请求.服务器不能记住客户.
无状态的应用:信息检索应用,图书目录查询等
有状态的需求:
购物网站:需要记住客户.
服务器如何区分不同的客户?
使用会话实现无状态的HTTP页面变成有状态的Web应用。
会话是客户与服务器之间的不中断的请求响应序列。
对会话的每个请求,服务器能够识别出请求来自于同一个客户。
当一个未知的客户向web应用程序发送第一个请求时就开始了一个会话。
会话的概念
会话(session)是客户与服务器之间的不中断的请求响应序列。对会话的每个请求,服务器能够识别出请求来自于同一个客户。当一个未知的客户向web应用程序发送第一个请求时就开始了一个会话。
注意:
容器不能使用客户的IP地址唯一标识客户。
客户可能是通过局域网访问Internet。
尽管在局域网中客户有一个IP地址,但对于服务器来说,客户的IP地址实际是路由器的IP地址,所以该局域网所有客户的IP地址都相同!因此也就无法唯一标识客户。
使用HttpSession对象通常需要三步:
(1)为客户创建或获得与请求关联的会话对象;
(2)在会话对象中添加或删除名/值对属性;
(3)如果需要可使会话失效。