状态跟踪的方式:
1,隐藏表单
2,cookie
工作流程:客户端向服务器发出请求,服务器调用response.addCookie()方法,附加cookie对象信息。产生响应时,会增加set-cookie响应头,在该响应头中描述cookie信息。当客户端再次向服务器发出请求时,会在请求信息中增加cookie请求头,将cookie信息再发送给服务器。服务器发现客户端发送给服务器的信息,和自己发送给客户端的信息一致,就认为是同一用户。
Cookie的分类:
(1)存放在客户端浏览器的缓存中,当浏览器一关闭,cookie消失;
(2)如果cookie设置了过期时间(setMaxAge(秒数)),cookie会存放在客户端的文件中。在过期时间内,浏览器可以一直读取cookie文件信息,发送给服务器
3,session
工作流程:
客户端向服务器发送请求,服务器产生session对象用于跟踪用户的状态。为了标识不同的用户,服务器会给每个session对象分配一个唯一标识sessionID。然后,为了管理所有用户的session对象,服务器以sessionID为键,以session对象为值,封装成Map集合。
产生响应时,会将sessionID以set-cookie响应头的方式发送给客户端。客户端将sessionID缓存在浏览器。当客户端再次发送请求,会将sessionID再以cookie请求头的方式发送给服务器,服务器根据sessionID找到对应的session对象,从而跟踪状态。
4,URL重写
由于cookie容易引起一些安全隐患。所以,有些用户出于安全考虑,可能会禁用cookie。但这样一来,如果使用session跟踪状态,客户端也无法将sessionID传递给服务器。这时,可以采用URL重写,将sessionID强行附加在URL后面,保证客户端禁用cookie时,服务器也能得到sessionID,从而跟踪状态。URL重写可以看做是session的一种补充。使用response.encodeURL(“url路径”)进行URL重写
Session的管理:
Session是服务器用于跟踪用户状态的对象,由于http协议是无状态的协议,当请求和响应完成过后连接会断开。这就意味着,客户端是否关闭浏览器,用户是否下线,服务器并不清楚。所以,如果session不及时清理,那么无效的.过时的session对象会极大消耗服务器内存资源
会话超时管理:
销毁会话三种简单方式:
——设置会话超时。
——在session对象上调用invalidate()方法。
——应用结束。
Session和cookie的区别:
1.session是服务器端的对象,用户信息保存在服务器端。cookie信息保存在客户端。
2.Session可以绑定对象在会话范围内共享。而cookie只保存文本数据。