Cookie的特点和作用、Cookie案例

Cookie的特点和作用

  1. cookie存储数据在客户端浏览器
  2. 浏览器对于单个cookie的大小有限制(4kb)以及 对同一个域名下的总cookie数量也有限制(20个)

作用:

  1. cookie一般用于存储少量的不太敏感的数据
  2. 在不登录的情况下 完成服务器对客户端的身份识别

Cookie案例-记住上一次访问时间

案例需求:

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

分析

图解

 

 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);
    }
}
复制代码

运行结果

第一次访问

 

 第二次访问

posted @   baimingze  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示