• Java 之 cookie 记住用户登录时间案例


    需求:

      1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
      2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串

    分析:

    1. 可以采用Cookie来完成
    2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie
        2.1 有:不是第一次访问
              1. 响应数据:欢迎回来,您上次访问时间为:2019年10月4日11:50:20
              2. 写回Cookie:lastTime=2019年10月4日11:50:01
        2.2 没有:是第一次访问
              1. 响应数据:您好,欢迎您首次访问
              2. 写回Cookie:lastTime=2019年10月4日11:50:01

    代码实现:

      1 import javax.servlet.ServletException;
      2 import javax.servlet.annotation.WebServlet;
      3 import javax.servlet.http.Cookie;
      4 import javax.servlet.http.HttpServlet;
      5 import javax.servlet.http.HttpServletRequest;
      6 import javax.servlet.http.HttpServletResponse;
      7 import java.io.IOException;
      8 import java.net.URLDecoder;
      9 import java.net.URLEncoder;
     10 import java.text.SimpleDateFormat;
     11 import java.util.Date;
     12 
     13 /**
     14    记住用户登录时间案例
     15  */
     16 @WebServlet("/cookieservlet")
     17 public class cookieservlet extends HttpServlet {
     18     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     19         // 设置响应消息体的数据格式以及编码
     20         response.setContentType("text/html;charset=utf-8");
     21 
     22         //1 获取所有 cookie
     23         Cookie[] cookies = request.getCookies();
     24         boolean flag = false;  // 默认没有 cookie 为 lastTime
     25         // 2.遍历cookie 数组
     26         if (cookies != null && cookies.length > 0) {
     27             for (Cookie cookie : cookies) {
     28                 // 3 获取所有的cookie 名称
     29                 String name = cookie.getName();
     30                 // 4.判断名称是否是 lastTime
     31                 if("lastTime".equals(name)) {
     32                     // 有 cookie,不是第一次访问
     33                     flag = true;
     34 
     35                     // 获取 cookie 的 value
     36                     // 响应数据
     37                     // 获取 cookie 的value,s时间
     38                     String value = cookie.getValue();
     39 
     40                     System.out.println("解码前:"+value);
     41                     // URL 解码
     42                     value = URLDecoder.decode(value, "utf-8");
     43                     System.out.println("解码后:"+value);
     44 
     45 
     46                     //设置cookie 的 value
     47                     // 获取当前时间的字符串,重新设置  cookie 值,重新发送cookie
     48 
     49                     Date date = new Date();
     50                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
     51                     String str_date = sdf.format(date);
     52 
     53                     System.out.println("编码前:"+str_date);
     54                     //URL 编码
     55                     str_date = URLEncoder.encode(str_date, "utf-8");
     56                     System.out.println("编码后:"+str_date);
     57 
     58                     cookie.setValue(str_date);
     59 
     60                     // 设置 cookie的存活时间
     61                     cookie.setMaxAge(60*60);
     62                     response.addCookie(cookie);
     63 
     64 
     65                     response.getWriter().write("<h1>欢迎回来,您上次访问时间为:"+value+"</h1>");
     66 
     67                     break;
     68                 }
     69             }
     70         }
     71 
     72         if(cookies == null || cookies.length==0 || flag == false) {
     73             // 没有,第一次访问
     74 
     75             //设置cookie 的 value
     76             // 获取当前时间的字符串,设置cookie值,发送cookie
     77 
     78             Date date = new Date();
     79             SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
     80             String str_date = sdf.format(date);
     81             Cookie cookie = new Cookie("lastTime",str_date);
     82 
     83             // 解决时间里面有特殊字符,使用 URL 编码
     84             System.out.println("编码前:"+str_date);
     85             //URL 编码
     86             str_date = URLEncoder.encode(str_date, "utf-8");
     87             System.out.println("编码后:"+str_date);
     88 
     89             cookie.setValue(str_date);
     90 
     91             // 设置 cookie的存活时间
     92             cookie.setMaxAge(60*60);
     93             response.addCookie(cookie);
     94 
     95             response.getWriter().write("<h1>欢迎您首次访问</h1>");
     96         }
     97     }
     98 
     99     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    100         this.doPost(request, response);
    101     }
    102 }
  • 相关阅读:
    动态页面技术(JSP/EL/JSTL)
    JavaWeb核心之Servlet
    会话技术Cookie&Session
    待整理
    二进制中1的个数(python)
    矩形覆盖(python)
    变态跳台阶(python)
    跳台阶(python)
    斐波那契数列(python)
    旋转数组的最小数字(python/c++)
  • 原文地址:https://www.cnblogs.com/niujifei/p/11622746.html
Copyright © 2020-2023  润新知