原因:HTTP是一个无状态的连接
无状态:不会记录上次访问的信息,每次的请求都是一次全新的请求。
Web应用状态管理:4总方式来进行状态跟踪(回话跟踪)
-
隐藏表单域
在源代码中可以查看到,相对不安全。
-
把信息保存在客户端
-
Session:会话
把信息保存在服务器中,Session必须要依赖于cookie。
-
url的重写
cookie别禁用
cookie
服务器在响应请求的时候,将一些数据以“键-值”对的形式通过响应信息保存在客户端。
特点:
-
以键值对的形式保存(只能保存字符串类型)
-
服务器通过响应发回给客户端
-
保存在客户端
运行机制
//1. 客户端发送请求到服务端,服务端创建一个Cookie(键值对),响应发回给客户端 //浏览器中就保存了一份该服务器下的Cookie //创建一个cookie Cookie cookie = new Cookie("键","值"); //可以设置多个cookie //设置cookie的有效期 以秒为单位 cookie.setMaxAge(3*24*60*60);//三天 //有效期的设置在添加之前。3*24*60*60可读性更好 //把cookie放到响应中,然后响应给客户端 resp.addCookie(cookie); //2.当客户端第二次访问该浏览器时,浏览器会先去查看该服务器下的Cookie是否失效 //如果没有失效,则读取Cookie的内容放到盖茨请求的请求头中,发往服务器。 //如果已将失效,请求头中不会添加Cookie的内容 //3.服务器端会读取客户端发送的请求头中的头部信息来记录 访问的状态。 //得到浏览器传过来的Cookie Cookie[] cookies = req.getCookies(); //判断是否为空 if(cookies != null){ for(Cookie cookie : cookies){ cookie.getName();//获得cookie的名字 cookie.getValue();//获得cookie的值 cookie.setValue();//设置cookie的值 cookie.getMaxAge();//获得cookie的有效期 } } //注意: //1.Cookie的有效期为一次回话期间 //一次回话期间 -> 打开浏览器进行访问 到 关闭浏览器。 //2.每个浏览器只能访问自己访问的cookie,不能访问其他浏览器的。