客户访问Web应用时,许多情况下,web服务器必须跟踪客户的状态,比如客户登录信息,购物车信息等。
当一个会话开始,servlet容器会创建一个HttpSession对象存放客户状态的信息,servlet容器为每个HttpSession对象分配一个唯一的标识符——SessionID
具体流程是这样的:
1.当浏览器第一次请求访问某web应用中任意一个支持会话的网页(登录页面),servlet容器会寻找http请求中表示sessionID的cookie,由于第一次访问不存在cookie,因此认为新的会话开始了。于是创建一个HttpSession对象,分配SessionID,并且把这个ID作为cookie添加到http响应结果中。当浏览器接收到http响应结果后,会把其中表示sessionID的cookie保存在客户端。
2.浏览器进程继续请求访问登陆页面,在本次http请求中会寻找表示sessionID的cookie,由于这次可以找到cookie,因此认为本次请求已经处于一次会话中了。servlet容器不再创建新的HttpSession对象,而是从cookie中获取sessionID,根据ID找到内存中对于的Httpsession对象。
3.浏览器进程重复步骤二,直到当前会话被销毁。HttpSession对象就会结束生命周期。
public void login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
//登录测试session
HttpSession session = request.getSession();
User user =(User) session.getAttribute("user");
if(us