状态跟踪:http协议是一种无状态的协议,当请求和响应完成后,会断开连接,以释放服务器的内存资源。所以服务器无法保存客户端的状态,服务器会认为每次请求的客户端都是新用户。但是,很多时候,我们需要得到客户端的状态,完成一系列的商务活动,这时候就需要状态跟踪。
状态跟踪有四种结局方案:
1、隐藏表单 <input type="hidden" name="session" value="…">
2、cookie 工作流程:客户端访问服务器,服务器调用response.addCookie()方法。产生响应时,会产生set-cookie响应头,将cookie文本发送给客户端。客户端会将cookie文件爱你保存起来。当客户端再次请求服务器时,会产生cookie请求头,将之前服务器发送的cookie信息,再次发送给服务器。服务器就可以根据cookie信息跟踪客户端状态。
3、session的工作流程,客户端访问服务器,服务器调用request.getSesion()产生session对象,用于跟踪用户的状态。同时,给session对象分配一个唯一标识sessionid。为了管理session对象,以sessionid为键,,以session对象为值,封装成map集合。产生响应时,将sessionId以cookie方式发送给客户端。存放在客户端浏览器缓存中,当客户端再次请求服务器,会将sessionId以cookie请求头的方式发送。服务器得到sessionId后,从map集合中得到session对象,从而跟踪状态。
session是服务器端用于保存客户端相关状态的对象。由于http协议是无状态的协议,所以,客户端是否关闭浏览器,服务器并不知道。客户端即使关闭浏览器下线,服务器也会一直保存session。这样会极大耗费服务器内存资源,所以服务器应该及时清理过时的session,以释放服务器的内存资源。
sesison的销毁有三种方式:
1、设置超时时间setMaxInactiveInterval(int);
2、调用session对象的invalidate(),强行销毁
3、应用服务器崩溃
4、url重写
当客户端禁用了cookie之后,这时服务器发送给客户端的sessionId,客户端就不能通过cookie方式进行保存,也不能通过session方式。解决方法是在url后面强行附加sessionid.
<ahref="/book/WriteURL;jsessionid=F7A5D5B80242D214DQR113>Click</a>"
cookie的分类:
1、存放在客户端浏览器缓存中。当浏览器不关闭cookie信息一直存在,浏览器一关闭,cookie消失。
2、存放在客户端的文件中,并可以设置cookie的过期时间。过期时间之内,即使浏览器关闭也可以将cookie信息发送给服务器。超过过期时间,cookie消失。
cookie信息是以文本方式存放在客户端,所以容易引起一些安全隐患,所以不要把隐秘信息以cookie方式保存
ServletContext(上下文)整个web应用程序
HttpSession(会话) 一个会话交互
ServletRequest(请求) 一次请求
setAttribute(String,Objecct)
voidremoveAtribute(String)
Enumeration
getAttributionNames()
cookie和session的区别
1、cookie信息是存放在客户端的,session信息是以对象方式存放在服务器的
2、cookie信息存放的是文本数据,而session对象可以绑定对象共享
3、客户端和服务器之间传递cooki,传递的是具体的数据。而使用session时,传递的只是sessionid,所有seesion安全性比较好。