HTTP协议是一个无状态协议,即Web应用程序无法区分收到的两个HTTP请求是否是同一个浏览器发出的。为了跟踪用户状态,服务器可以向浏览器分配一个唯一ID,并以Cookie的形式发送到浏览器,浏览器在后续访问时总是附带此Cookie,这样,服务器就可以识别用户身份。
JavaEE的Servlet机制内建了对Session的支持。当我们需要获取Session时,可以通过request请求对象的getSession()方法。
每个用户都会有一个唯一的ID来识别身份,每个用户第一次访问服务器后,会自动获得一个Session ID。如果用户在一段时间没有访问服务器,那么Session会自动失效,下次即使带着上次分配的Session ID访问,服务器也会认为这是一个新用户,会分配新的Session ID。但是在一次Session会话中包含若干次的request请求。(就像我们平时用的验证信息一样有时效性,服务器只识别验证码)
追踪顾名思义,要有一个追的根源,然而在Session中这个根源就是一个名为JSESSIONID的Cookie。在Servlet中第一次调用request.getSession()时,Servlet容器自动创建一个Session ID,然后通过一个名为JSESSIONID的Cookie发送给浏览器如图所示:

并且这个Cookie就是用来跟踪用户会话的,由一个Servlet提供的HttpServlet本质上就是一个JSESSIONID。
Servlet容器提供了Session机制以跟踪用户;Session机制是以Cookie形式实现的,Cookie名称为JSESSIONID;Cookie可以在客户端存储数据;