需求:

  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

代码实现:

 import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date; /**
记住用户登录时间案例
*/
@WebServlet("/cookieservlet")
public class cookieservlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置响应消息体的数据格式以及编码
response.setContentType("text/html;charset=utf-8"); //1 获取所有 cookie
Cookie[] cookies = request.getCookies();
boolean flag = false; // 默认没有 cookie 为 lastTime
// 2.遍历cookie 数组
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
// 3 获取所有的cookie 名称
String name = cookie.getName();
// 4.判断名称是否是 lastTime
if("lastTime".equals(name)) {
// 有 cookie,不是第一次访问
flag = true; // 获取 cookie 的 value
// 响应数据
// 获取 cookie 的value,s时间
String value = cookie.getValue(); System.out.println("解码前:"+value);
// URL 解码
value = URLDecoder.decode(value, "utf-8");
System.out.println("解码后:"+value); //设置cookie 的 value
// 获取当前时间的字符串,重新设置 cookie 值,重新发送cookie Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date); System.out.println("编码前:"+str_date);
//URL 编码
str_date = URLEncoder.encode(str_date, "utf-8");
System.out.println("编码后:"+str_date); cookie.setValue(str_date); // 设置 cookie的存活时间
cookie.setMaxAge(60*60);
response.addCookie(cookie); response.getWriter().write("<h1>欢迎回来,您上次访问时间为:"+value+"</h1>"); break;
}
}
} if(cookies == null || cookies.length==0 || flag == false) {
// 没有,第一次访问 //设置cookie 的 value
// 获取当前时间的字符串,设置cookie值,发送cookie Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str_date = sdf.format(date);
Cookie cookie = new Cookie("lastTime",str_date); // 解决时间里面有特殊字符,使用 URL 编码
System.out.println("编码前:"+str_date);
//URL 编码
str_date = URLEncoder.encode(str_date, "utf-8");
System.out.println("编码后:"+str_date); cookie.setValue(str_date); // 设置 cookie的存活时间
cookie.setMaxAge(60*60);
response.addCookie(cookie); response.getWriter().write("<h1>欢迎您首次访问</h1>");
}
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

Java 之 cookie 记住用户登录时间案例的更多相关文章

  1. java使用Cookie判断用户登录情况

    1.判断是否登录 public boolean isLogin() { Set<Cookie> cookies = this.browser.getCookies(); String JS ...

  2. Django 用Session和Cookie分别实现记住用户登录状态

    简介 由于http协议的请求是无状态的.故为了让用户在浏览器中再次访问该服务端时,他的登录状态能够保留(也可翻译为该用户访问这个服务端其他网页时不需再重复进行用户认证).我们可以采用Cookie或Se ...

  3. Asp.Net MVC记住用户登录信息 下次登录无需输入密码

    有的时候做网站,就需要记住用户登录信息,下次再登录网站时,不用重复输入用户名和密码,原理是浏览器的cookie把状态给记住了! 那么具体是怎么实现的呢?下面博主将一部分代码贴出来,想要完整版的Demo ...

  4. java.net.URL 模拟用户登录网页并维持session

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...

  5. java.net.URL 模拟用户登录网页并维持session【转】

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...

  6. spring security实现记录用户登录时间等信息

    目录 spring security实现记录用户登录时间等信息 一.原理分析 二.实现方式 2.1 自定义AuthenticationSuccessHandler实现类 2.2 在spring-sec ...

  7. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  8. cookie实现用户登录验证

    cookie实现用户登录验证 1, INSTALLED_APPS中注册app03 2,在主程序中新建映射关系到app3的url中 from django.conf.urls import url,in ...

  9. 基于cookie的用户登录状态管理

    cookie是什么 先来花5分钟看完这篇文章:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies 看完上文,相信大家对cookie已经有 ...

随机推荐

  1. PHP系列 | PDO::prepare(): send of 68 bytes failed with errno=32 Broken pipe

    设计场景 1.开启Redis的键空间过期事件(键过期发布任务),创建订单创建一个过期的key,按照订单号为key,设置过期时间. 2.通过Redis的订阅模式(持久阻塞),获取到订单号进行组装. 3. ...

  2. Cookie的Secure属性和HttpOnly属性

    基于安全的考虑,需要给cookie加上Secure和HttpOnly属性,HttpOnly比较好理解,设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie ...

  3. 蓝牙BLE: 蓝牙(BLE)协议栈

    蓝牙协议是通信协议的一种,一般而言,我们把某个协议的实现代码称为协议栈(protocol stack),BLE协议栈就是实现低功耗蓝牙协议的代码,理解和掌握BLE协议是实现BLE协议栈的前提.当前的蓝 ...

  4. LocalDate/LocalDateTime/LocalTime与Date的互转

    // 01. java.util.Date --> java.time.LocalDateTime public void UDateToLocalDateTime() { java.util. ...

  5. NVM 安装注意

    windows 系统下尽量使用安装版本,选择安装路径时,路径中不能带有空格,否则无法使用 nvm use xx.xx.xx

  6. python-- python threadpool 的前世今生

    引出 首先需要了解的是threadpool 的用途,他更适合于用到一些大量的短任务合集,而非一些时间长的任务,换句话说,适合大量的CPU密集型短任务,那些消耗时间较长的IO密集型长任务适合用协程去解决 ...

  7. Kubernetes 清除持续 Terminating 状态的Pods

    强制删除所有Pods -- 谨慎使用 kubectl delete pods --all --grace-period=0 --force

  8. GoldenGate 19.1 发布

    GoldenGate 19.1 新特性 For the Oracle Database ➢ Oracle Database 19c Support 支持从Oracle DB 19c抽取和投递数据,包括 ...

  9. cmd 域名生效检测

    nslookup -qt=ns xxx.baidu.comnslookup -qt=txt xxx.baidu.com

  10. Manytasking optimization MATP

    Manytasking Jmetal代码反向解析1_MATP测试函数集 觉得有用的话,欢迎一起讨论相互学习~Follow Me 这是我在写Manytask optimization时的笔记,代码地址可 ...