Cookie的特点和作用
- cookie存储数据在客户端浏览器
- 浏览器对于单个cookie的大小有限制(4kb)以及 对同一个域名下的总cookie数量也有限制(20个)
作用:
- cookie一般用于存储少量的不太敏感的数据
- 在不登录的情况下 完成服务器对客户端的身份识别
Cookie案例-记住上一次访问时间
案例需求:
- 访问一个Servlet 如果是上一次访问 则提示 您好 欢迎您首次访问
- 如果不是第一次访问 则提示 欢迎回来 你上一次访问时间为:显示时间的字符串
分析
图解
1.可以采用Cookie来完成
2.在服务器中的Servlet判断是否有一个名为lastTime的Cookie
- 有:不是第一次访问
- 响应数据:欢迎回来 您上一次访问时间为:2022年8月15日14:00:30
- 写回Cookie:lastTime=2022年8月15日14:00:30
- 没有:是第一次访问
- 响应数据:你好 欢迎您首次访问
- 写回Cookie:lastTime=2022年8月15日14:00:30
java代码
package com.bai.Cookie; 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.URL; import java.net.URLDecoder; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; @WebServlet("/CookieTest") public class CookieTest extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置响应的消息体的数据格式以及编码 resp.setContentType("text/html;charset=utf-8"); //1.获取所有Cookie Cookie[] cookies = req.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为lastTime //设置Cookie的value //获取当前时间的字符串 重写设置Cookie的值 重新发送cookie Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String str_date = sdf.format(date); //URL编码 str_date=URLEncoder.encode(str_date,"utf-8"); cookie.setValue(str_date); //设置cookie的存活时间 cookie.setMaxAge(60*60*24*30);//一个月 resp.addCookie(cookie); //响应数据 String value = cookie.getValue(); value=URLDecoder.decode(value,"utf-8"); resp.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); str_date=URLEncoder.encode(str_date,"utf-8"); Cookie cookie = new Cookie("lastTime", str_date); cookie.setValue(str_date); //设置cookie的存活时间 cookie.setMaxAge(60*60*24*30);//一个月 resp.addCookie(cookie); resp.getWriter().write("<h1>您好 欢迎您首次访问</h1>"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
运行结果
第一次访问
第二次访问