1 状态跟踪:
由于http协议是一种无状态的协议,当请求和响应完成后,连接会断开,以释放服务 器的资源。这时每次请求到达后,服务器都会认为是新用户,这就是无状态。但是很多 时候,服务器又需要保存客户端的状态进行一些商务活动,如:用户的登录、购物车信 息。这时就需要状态跟踪。
2 状态跟踪的方式:
1 隐藏表单
2 cookie
3 session
4 url重写
3 cookie工作流程:
客户端访问服务器,服务器调response.addCookie(),那么就会产生set-cookie响应头,将cookie对象中封装的信息以键值对文本方式发送给客户端。客户端再次请求,就会将之前服务器给客户端的cookie信息再次请求头的方式发给服务器,以跟踪状态。
Cookie分两种:
1 放置在客户端浏览器缓存中,当浏览器关闭,cookie消失。
2 放置在客户端文件中,当浏览器关闭,cookie不会消失,只有过期时间到了,才会消 失。(设置时间 setMaxAge(),里面参数为秒)
4 Session的工作流程:
当客户端访问服务器,服务器调用request.getSession().产生一个httpSession对象,用来保存客户端信息。一个用户就分配一个session对象。同时给该session对象产生一个唯一标识:sessionId.然后以sessionId为键,以session对象为值加入一个map 集合。产生响应信时会将时,会将sessionId以set-cookie响应头的方式发送给客户端。当客户端再次请求,会将sessionId以cookie请求头的方式再次发送给服务器,服务器根据sessionId找到对应的session对象,从而跟踪状态。
5 request.getSession()有一个重载方法request.getSession(boolean),当boolean变量为true,表示如果没有当前会话,创建一个新的会话对象。如果有当前会话,直接取出来。当boolean变量为false,表示有当前会话,直接取出,没有当前会话,返回null,request.getSession()等价于request.getSession(true)。
HttpSession session=request.getSession();
//在session中封装数据,作用范围在一次会话中
session.setAttribute(“aaa”,”111”);
6 session是服务器的对象,当客户端浏览器关闭并不意味session消失。
7 session的销毁方法有:
1)session超时。通过设置超时时间来销毁session,如果在指定时间之内,session有效, 超过时间,服务器会认为客户端下线,就会将session对象销毁,以释放服务器资源。
session.setMaxInactiveInterval(秒)。如果为-1,就永不销毁。
还可以在web.xml中设置。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
以分钟为单位。
2)调用invalidate(),强行销毁session
3)服务器崩溃或重新部署
8 session与cookie区别:
1)session是服务器对象;cookie是一段文本
2)Session数据放在服务器;cookie数据放在客户端
3)Session可以封装对象;cookie只能封装文本。
9 url重写:
Session对象通常需要使用cookie来传输sessionId,一旦客户端浏览器将cookie禁用,这时sessionId就不能从客户端再传递给服务器了。这时服务器就认为客户端是新用户,不能再跟踪状态。
10 url重写原理:
将sessionId强行附加在url后面,这样就算客户端禁用cookie,服务器同样能得到sessionId从而能在客户端禁用cookie的情况下,跟踪状态。