Cookie
🐲无状态的HTTP协议
- HTTP是一个无状态的协议,当一个客户端向服务端发送请求,在服务器返回响应后,连接就关闭了,在服务端不保留连接信息。
🐲什么是Cookie
- Cookie是一种客户端保持HTTP状态信息的技术
- Cookie是在浏览器访问服务器的某一资源时,有web服务器在响应头传送给浏览器的数据
- 浏览器如果保存了某一cookie,那么以后每次访问服务器的时候,都会在请求头传递给服务器
- 一个cookie只能记录一种信息,是key-value形式
- 一个web站点可以给浏览器发送多个cookie,一个浏览器也可以存储多个站点的cookie
- cookie在服务端完成,传给客户端
- cookie用来处理客户端发送不同请求的时候如何使用相同的参数信息
🐲Cookie的使用
Cookie cookie = new Cookie("0001","beijing");
response.addCookie(cookie);
//设置cookie的参数
cookie.setMaxAge(int seconds);
cookie.setPath(String url);
//获取cookie对象
Cookie[] cookies = request.getCookies();
🐲Cookie的特点
-
cookie是保存在浏览器端的数据名称
-
cookie分类:
-
临时cookie:默认是存储在内存中的,所以当浏览器关闭的时候,cookie自动失效
-
持久化cookie:保存在浏览器的某一存储目录,当时间过期后才会失效
cookie.setMaxAge(3*24*3600); //给cookie对象添加时间有效期,单位是秒
-
每一个cookie对象中保存一个key-value键值对的数据,想要存储多个k-v数据,需要创建多个cookie对象
-
给cookie设置固定路径
cookie.setPath("cookie/abc");
-
🐲Cookie实现免密码登录
-
用户发送验证cookie信息的请求,编写对应的servlet进行处理
-
如果包含cookie,直接跳转到成功页面
-
如果不包含cookie,直接跳转到登录页面
//设置request和response的编码 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("gbk"); //获取cookie对象 Cookie[] cookies = request.getCookies(); //如果cookies等于null,直接跳转得到登录页面进行登录请求,如果不为空,进行相关处理 if(cookies != null) { for(Cookie c:cookies) { String key = c.getName(); if("uid" != null) { String value = c.getValue(); User u = userService.getUserById(Integer.valueOf(value)); //如果u不为null,那么有值,直接跳转 if(u != null) { response.sendRedirect("hello"); }else { response.sendRedirect("page"); } }else { response.sendRedirect("page"); } } }else { response.sendRedirect("page"); }