zoukankan      html  css  js  c++  java
  • 客户端会话技术--cookie

    会话技术

    1、会话:一次会话中包含多次请求和响应。

    一次会话:浏览器第一次给服务器发送资源,会话建立,直到有一方断开为止。

    2、功能:在一次会话的范围内的多次请求间,共享数据。

    3、方式:客户端会话技术:cookie; 服务器端会话技术:session。

    cookie:

    1、概念:客户端会话技术,将数据保存到客户端。

    2、快速入门:

    使用步骤:

    1、创建cookie对象,绑定数据

    new Cookie("user", "root");

    2、发送cookie对象

    response.addCookie(cookie1);

    3、获取cookie,拿到数据

    Cookie[] cookies = request.getCookies();

    3、实现原理

    基于响应头set-cookie和请求头cookie实现

    /**
    * @program: day16_cookie&&session
    * @description:默认情况下,浏览器关闭后,cookie数据被销毁
    * @author: lixy
    * @create: 2020-05-23 19:18
    **/
    @WebServlet(name = "CookieDemo1", urlPatterns = {"/cookieDemo1"})
    public class CookieDemo1 extends HttpServlet {
      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          Cookie cookie1 = new Cookie("user", "李逸");
          Cookie cookie2 = new Cookie("password", "root");
          //设置cookie1的存活时间
          cookie1.setMaxAge(30);//将cookie持久化到硬盘,30秒后会自动删除这个cookie
          //设置cookie的获取范围。默认情况下,设置当前的虚拟目录
          cookie1.setPath("/");
          //设置默认方式
          cookie2.setMaxAge(-1);
          response.addCookie(cookie1);
          response.addCookie(cookie2);

      }

      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          this.doPost(request, response);
      }
    }
    @WebServlet(name = "CookieDemo2", urlPatterns = {"/ookieDemo2"})
    public class CookieDemo2 extends HttpServlet {
      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          request.setCharacterEncoding("utf-8");
          response.setContentType("text/html;charset=utf-8");
          String contextPath = request.getContextPath();

          Cookie[] cookies = request.getCookies();
          for (Cookie cookie : cookies) {
              String name = cookie.getName();
              String value = cookie.getValue();
              System.out.println(name+":"+value);
          }
      }

      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          this.doPost(request, response);
      }
    }

    @WebServlet(name = "CookieTest", urlPatterns = {"/cookieTest"})
    public class CookieTest extends HttpServlet {
      @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          request.setCharacterEncoding("utf-8");
          response.setContentType("text/html;charset=utf-8");
          String contextPath = request.getContextPath();
          String user = request.getParameter("name");
          String password = request.getParameter("password");
          Cookie[] cookies = request.getCookies();
          boolean flag = false;
          if (cookies != null && cookies.length>0){
              for (Cookie cookie : cookies) {
                  String name = cookie.getName();
                  if ("lastTime".equals(name)){
                      String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
                      String value = cookie.getValue();
                      //url解码
                      value = URLDecoder.decode(value, "UTF-8");
                      System.out.println("编码前:"+time);
                      //url编码
                      time = URLEncoder.encode(time, "utf-8");
                      System.out.println("编码后:"+time);
                      cookie.setValue(time);
                      cookie.setMaxAge(60 * 60 * 24 * 30);
                      response.addCookie(cookie);
                      flag=true;
                      response.getWriter().write("<h1>欢迎回来,您上次访问时间为"+value+"</h1>");
                      break;
                  }
              }
          }
          if (cookies == null || cookies.length==0 || !flag){
              String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
              System.out.println("编码前:"+time);
              //url编码
              time = URLEncoder.encode(time, "utf-8");
              System.out.println("编码后:"+time);
              Cookie lastTime = new Cookie("lastTime", time);
              lastTime.setMaxAge(60 * 60 * 24 * 30);
              response.addCookie(lastTime);
              response.getWriter().write("<h1>欢迎您首次访问</h1>");
          }
      }

      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          this.doPost(request, response);
      }
    }

    //url解码 value = URLDecoder.decode(value, "UTF-8");

    System.out.println("编码前:"+time);

    //url编码 time = URLEncoder.encode(time, "utf-8");

    System.out.println("编码后:"+time);

     

  • 相关阅读:
    python环境准备(2020-1-13)
    git知识
    toolbar的相关知识
    Android开发极光推送功能实现步骤
    Android开发分享功能实现步骤
    使用tablayout和viewpager实现简单的页面布局
    activity与fragment的交互(一个activity跳转到另一个fragment)
    java中堆区和栈区的区别
    WebView的基本使用
    final的用法
  • 原文地址:https://www.cnblogs.com/lxy522/p/12949574.html
Copyright © 2011-2022 走看看