概念

客户端会话技术

快速入门

使用步骤

1、创建Cookie对象,绑定数据
2、发送Cookie对象
3、获取Cookie,拿到数据

  1. package com.example.javawebs.cookiedemo;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import javax.servlet.annotation.*;
  5. import java.io.IOException;
  6. @WebServlet("/cookieServlet1")
  7. public class cookieServlet1 extends HttpServlet {
  8. @Override
  9. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  10. //创建cookie对象
  11. Cookie c = new Cookie("msg", "hello");
  12. //设置cookie存活时间 将cookie持久化到硬盘 30秒 还有更多属性可以设置
  13. c.setMaxAge(30);
  14. //发送cookie
  15. response.addCookie(c);
  16. }
  17. @Override
  18. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  19. this.doGet(request,response);
  20. }
  21. }
  1. package com.example.javawebs.cookiedemo;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.Cookie;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. @WebServlet("/cookieServlet2")
  10. public class cookieServlet2 extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13. //获取cookie
  14. Cookie[] cs = request.getCookies();
  15. //获取数据,遍历cookie
  16. if (cs != null){
  17. for (Cookie c : cs) {
  18. String name = c.getName();
  19. String value = c.getValue();
  20. System.out.println(name+":"+value);
  21. }
  22. }
  23. }
  24. @Override
  25. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  26. this.doGet(request,response);
  27. }
  28. }

image.png

多个Cookie

  1. package com.example.javawebs.cookiedemo;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.Cookie;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. @WebServlet("/cookieServlet3")
  10. public class cookieServlet3 extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  13. //创建cookie对象
  14. Cookie c1 = new Cookie("msg", "hello");
  15. Cookie c2 = new Cookie("name", "lww");
  16. Cookie c3 = new Cookie("high", "180");
  17. //发送cookie
  18. response.addCookie(c1);
  19. response.addCookie(c2);
  20. response.addCookie(c3);
  21. }
  22. @Override
  23. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  24. this.doGet(request,response);
  25. }
  26. }

Cookie 上次登录时间demo

  1. package com.example.javawebs.cookiedemo;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.Cookie;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. import java.net.URLDecoder;
  10. import java.net.URLEncoder;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Date;
  13. @WebServlet("/cookieServlet4")
  14. public class cookieServlet4 extends HttpServlet {
  15. @Override
  16. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  17. response.setContentType("text/html;charset=utf-8");
  18. Cookie[] cookies = request.getCookies();
  19. boolean flag = false; //没有cookie为lastTime
  20. if (cookies != null && cookies.length >0){
  21. for (Cookie cookie : cookies) {
  22. String name = cookie.getName();
  23. if ("lastTime".equals(name)){
  24. String value = cookie.getValue();
  25. value = URLDecoder.decode(value,"utf-8");
  26. response.getWriter().write("欢迎回来,上次访问时间为:"+value);
  27. flag = true;
  28. //美国时间,需要转为中国时间
  29. Date date = new Date();
  30. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  31. String str_date = sdf.format(date);
  32. str_date = URLEncoder.encode(str_date, "utf-8");
  33. cookie.setValue(str_date);
  34. cookie.setMaxAge(60*60*24*30);
  35. response.addCookie(cookie);
  36. break;
  37. }
  38. }
  39. }
  40. if (cookies==null || cookies.length==0 || flag==false){
  41. //美国时间,需要转为中国时间
  42. Date date = new Date();
  43. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  44. String str_date = sdf.format(date);
  45. str_date = URLEncoder.encode(str_date, "utf-8");
  46. Cookie cookie = new Cookie("lastTime", str_date);
  47. cookie.setMaxAge(60*60*24*30);
  48. response.addCookie(cookie);
  49. response.getWriter().write("欢迎首次登录");
  50. }
  51. }
  52. @Override
  53. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  54. this.doGet(request,response);
  55. }
  56. }

JSP 完成上面demo

  1. <%@ page import="java.util.Date" %>
  2. <%@ page import="java.text.SimpleDateFormat" %>
  3. <%@ page import="java.net.URLEncoder" %>
  4. <%@ page import="java.net.URLDecoder" %>
  5. <%--
  6. Created by IntelliJ IDEA.
  7. User: 77239
  8. Date: 2022/1/3
  9. Time: 23:34
  10. To change this template use File | Settings | File Templates.
  11. --%>
  12. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  13. <html>
  14. <head>
  15. <title>Title</title>
  16. </head>
  17. <body>
  18. <%
  19. Cookie[] cookies = request.getCookies();
  20. boolean flag = false; //没有cookie为lastTime
  21. if (cookies != null && cookies.length >0){
  22. for (Cookie cookie : cookies) {
  23. String name = cookie.getName();
  24. if ("lastTime".equals(name)){
  25. flag = true;
  26. String value = cookie.getValue();
  27. value = URLDecoder.decode(value,"utf-8");
  28. //这里需要导入jsp api包,才可以使用out.write()
  29. response.getWriter().write("欢迎回来,上次访问时间为:"+value);
  30. //美国时间,需要转为中国时间
  31. Date date = new Date();
  32. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  33. String str_date = sdf.format(date);
  34. str_date = URLEncoder.encode(str_date, "utf-8");
  35. cookie.setValue(str_date);
  36. cookie.setMaxAge(60*60*24*30);
  37. response.addCookie(cookie);
  38. break;
  39. }
  40. }
  41. }
  42. if (cookies==null || cookies.length==0 || flag==false){
  43. //美国时间,需要转为中国时间
  44. Date date = new Date();
  45. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  46. String str_date = sdf.format(date);
  47. str_date = URLEncoder.encode(str_date, "utf-8");
  48. Cookie cookie = new Cookie("lastTime", str_date);
  49. cookie.setMaxAge(60*60*24*30);
  50. response.addCookie(cookie);
  51. response.getWriter().write("欢迎首次登录");
  52. }
  53. %>
  54. </body>
  55. </html>