会话跟踪技术:就是让当前访问的网址一直保持当前会话的数据。
实现会话跟踪的两种方法:Cookie和Session
- Cookie方法:是将状态保持的数据保存在浏览器中,只要浏览器不清楚Cookie数据以及Cookie数据的失效时间还没到,Cookie数据会一直保存在浏览器中!
- Session方法:是将状态保持的数据保存在服务器中,浏览器关闭后会话数据就失效!
- Cookie的实现
(1)Cookie的作用
- Cookie保存在浏览器中(请求用户端),主要用于保存请求状态的数据,这些数据是开发人员自定义,可以任意设置。
- 只要请求连接服务器的那一刻起,Cookie就会随着请求一起发送到服务器,服务器再根据Cookie数据进行业务逻辑处理。
(2)Cookie的应用场景
- 用户登录状态保持
- 购物车在未登录状态保存,登录后再保存到用户订单里面。
(3)在浏览器中查看当前状态的Cookie数据
在浏览页面按F2
(4)Cookie入门案例步骤
- 在登录逻辑代码中写入Cookie的值
/*servlet是用于处理http的请求*/
public class RegisterServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException,IOException {
//创建Cookie,设置cookie的值
Cookie usernamecookie = new Cookie("username", "amdin");
Cookie passwordcookie = new Cookie("password", "123");
//设置cookie的失效时间,单位为毫秒
usernamecookie.setMaxAge(1000*60*60);
passwordcookie.setMaxAge(1000*60*60);
//响应写入Cookie
resp.addCookie(usernamecookie);
resp.addCookie(passwordcookie);
}
}
- 在动态页面获得Cookie
public class LoginUL extends HttpServlet{
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
req.setCharacterEncoding("UTF-8");
String username=null;
String password=null;
//获得请求的Cookie
Cookie[] cookies = req.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies)
{
if("username".equals(cookie.getName())){
username=cookie.getValue();
}
if("password".equals(cookie.getName())){
password=cookie.getValue();
}
}
}
- 验证Cookie是否成功写入,看浏览器的Cookie值,并关闭浏览器再打开看Cookie值是否还保存。
(5)Cookie入门案例流程图
2. Session的实现
(1)Session是什么:Session是在有效时间内一个处理请求状态数据的对象。当服务器在创建Session对象时会产生一个唯一标识符JsessionID,JsessionID会写入到响应路径的Cookie里面,因为此时的没有设置Cookie的有效时间,所以浏览器关闭后存在Session内存的数据会失效。
(2)创建Session后在浏览器查看Cookie存在JsessionID唯一标识符
(3)Session入门案例实现
- 在登录逻辑代码中创建Session对象
public class RegisterServlet extends HttpServlet {
/*HttpServletRequest:请求对象,用于让程序获得各请求的参数*/
/*HttpServletResponse:响应对象,用于处理响应后请求处理,如返回某个页面*/
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
//判断用户账户密码是否正确
if("amdin".equals(username)&&"123".equals(password))
{
//通过请求获得session
HttpSession session = req.getSession();
//设置session的值,值存入sessio内存
session.setAttribute("username", "amdin");
session.setAttribute("password", "123");
}
- 在动态页面通过请求获得Session的值
public class LoginUL extends HttpServlet{
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String username=null;
String password=null;
//请求获得session参数
HttpSession session = req.getSession();
if(session.getAttribute("username")!=null){
username = (String)session.getAttribute("username");
}
if(session.getAttribute("password")!=null){
password = (String)session.getAttribute("password");
}
(4)Session入门案例的流程图