会话跟踪是什么和引入的原因
1.什么是会话跟踪?
对同一个用户向服务器发送请求以及服务器对其进行响应的过程的监视。
2.什么是会话?
客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称为会话,一个用户的使用请求操作都应该属于同一个会话。
3.会话跟踪引入的原因:
a.http协议是无状态协议。所谓无状态是指当客户端与服务器的数据交换结束后,客户端和服务器就会断开连接.若再次需要交换数据,又会建立新的连接。
b.在这种无状态协议下,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多个页面间切换时,服务器会保存该用户的信息。
会话跟踪技术
(1)Cookie:携带了客户端的个性化信息,在服务器端创建,通过response对象响应给客户端,并保存在客户端的电脑上(浏览器缓存中)。
(2)Session:
a.每一个用户都有一个不同的session,各个用户之间是不能共享的,是每个用户所独享的,在session中可以存放信息。在服务器端会创建一个session对象,产生一个sessionID来标识这个session对象,然后将这个sessionID放入到Cookie中发送到客户端,下一次访问时,sessionID会发送到服务器,在服务器端进行识别不同的用户Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效。
b.在用户第一次访问服务器时自动创建,并且只有访问Servlet、jsp这些动态资源时 才会自动创建;访问静态资源(html、图片等)时不会创建session。
(3)URL重写:
a.URL地址重写是对客户端不支持Cookie的解决方案。
b.每次自动创建Session时都会生成一个SessionId。
b.URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即便客户端不支持Cookie,也可以使用Session来记录用户状态。
例如:
(4)隐藏表单域:
type是hidden类型的,在浏览器页面上看不见,可以从后台通过name信息找到value信息。
<input type="hidden" value="VIP" name="userType" />
作用域(作用范围)
(1)page: 只在当前页面有效(页面范围)
属性名:userType
属性值:VIP
page.setAttribute("userType","VIP")
(2)request:在一个请求中有效(请求响应范围内)在当前Servlet里有效,一旦关闭Servlet就断开连接了。
request.setAttribute("userType","VIP");
(3)session:会话范围。在一个会话中有效(一个用户对服务器的所以请求都是一个会话,只要不从这个网站退出来就一直有效)
例:打开某宝页面,假设有100个页面,你在浏览的时候打开了一个页面,打开后服务器就会创建一个Session,这个Session在这100个页面中都可以看见。
session.setAttribute("userType","VIP");
(4)application:应用程序范围(全局的)
在Session基础上哪怕关闭了某宝的页面,这个userType也存在,因为这个应用程序存在。
application.setAttribute("userType","VIP");
页面跳转方式
(1)页面重定向:resp.sendRedirect()。在重定向会产生两个request对象,两个request对象是不同的,所携带的请求信息也是不同。属于客户端跳转
(2)请求转发:只产生了一个request对象。属于服务器端跳转。在跳转中使用的是同一个request对象,所以携带的请求信息是相同的是通过RequestDispatcher对象的getRequestDispatcher()方法进行请求转发。