会话

用户打开浏览器 点击了很多链接 访问了很多资源 关闭浏览器这个过程可以称之为会话
有状态会话:

保存会话的两种技术

cookie

  • 客户端技术(响应,请求)

session

  • 服务器技术,利用这个技术可以保存用户的会话信息。我们可以把信息放在session中

常见场景:网站登录之后,下次不用再登录了 第二次访问直接就上去了

image.png

  1. @Override
  2. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  3. //服务器告诉你,你来的时间。把这个时间封装为一个Cookie,下一次带来就知道你来了
  4. //解决控制台中文乱码
  5. req.setCharacterEncoding("utf-8");
  6. resp.setCharacterEncoding("utf-8");
  7. //解决网页中文乱码
  8. resp.setContentType("text/html;charset=utf-8");
  9. PrintWriter out = resp.getWriter();
  10. //Cookie 服务端端从客户端获取
  11. Cookie[] cookies = req.getCookies(); //返回一个数组 说明可以存在多个
  12. //判断Cookie是否存在
  13. if (cookies != null) {
  14. //如果存在怎么办
  15. out.println("你上次访问的时间是:");
  16. for (int i = 0; i < cookies.length; i++) {
  17. Cookie cookie = cookies[i];
  18. //获取Cookie的名字
  19. if (cookie.getName().equals("LastLoginTime")) {
  20. //将字符串解析为长整型
  21. long LastLoginTime = Long.parseLong(cookie.getValue());
  22. Date date = new Date(LastLoginTime);
  23. out.println(date.toLocaleString());
  24. }
  25. }
  26. }else {
  27. out.println("这是你第一次访问本站");
  28. }
  29. //服务器给客户端响应一个Cookie
  30. Cookie cookie = new Cookie("LastLoginTime",System.currentTimeMillis()+"");
  31. resp.addCookie(cookie);
  32. }
  1. <servlet>
  2. <servlet-name>cookiedemo1</servlet-name>
  3. <servlet-class>com.deng.servlet.CookieDemo1</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>cookiedemo1</servlet-name>
  7. <url-pattern>/cookiedemo1</url-pattern>
  8. </servlet-mapping>
  • 从请求中拿到cookie信息
  • 服务器响应给客户端cookie
    1. //获取Cookie
    2. Cookie[] cookies = req.getCookies();
    3. //获得Cookie中的key
    4. cookie.getName()
    5. //获得Cookie的value
    6. cookie.getValue()
    7. //新建一个Cookie
    8. Cookie cookie = new Cookie(key,value);
    9. //设置Cookie的有效期
    10. cookie.setMaxAge(int time);
    11. //响应给客户端
    12. resp.addCookie(cookie);
    cookie一般会保存在本地的用户目录下 appdata:

一个网站的cookie是否存在上限

  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie 每个站点存放20个cookie
  • Cookie大小有限制
  • 浏览器的上限大概为300个cookie

删除cookie

  • 不设置有限期 关闭浏览器 自动失效
  • 设置有效期时间为0

编码解码

  1. //URL编码格式
  2. URLEncoder.encode("String value","utf-8");
  3. //URL解码格式
  4. URLDecoder.decode("String value","utf-8");