【学习笔记】Cookie

Cookie

什么是会话?

  • 会话:用户打开一个浏览器,点击了一些超链接,访问了多个web资源,关闭浏览器,这个过程称之为会话。

  • 有状态会话:记录用户曾经登录过某个网站。

什么是Cookie?

  • Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

  • 作用:比如我们在访问一些网站时,第一次登录后,下一次再访问该网站,就不需要登录了。如哔哩哔哩、博客园等。

 

保存Cookie的两种方式

  • Cookie 使用客户端技术

  • Session 服务器技术,使用这个技术,可以保存用户的会话信息,我们可以把信息或数据保存在session中。

 

Cookie实现

Cookie类

  • Cookie中的一些属性

    private static final long serialVersionUID = -6454587001725327448L;
    private static final String TSPECIALS;
    private static final String LSTRING_FILE = "jakarta.servlet.http.LocalStrings";
    private static ResourceBundle lStrings = ResourceBundle.getBundle("jakarta.servlet.http.LocalStrings");
    private String name;
    private String value;
    private String comment;
    private String domain;
    private int maxAge = -1;
    private String path;
    private boolean secure;
    private int version = 0;
    private boolean isHttpOnly = false;

    name 是 键 value 是值,maxAge是Cookie的有效期......

  • Cookie的关于属性的get/set方法

    public String getName() {
        return this.name;
    }
    public void setValue(String newValue) {
        this.value = newValue;
    }
    public String getValue() {
        return this.value;
    }
    ......

我们以保存用户上一次访问的时间为例,了解cookie

import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
​
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
​
public class CookieDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
​
        PrintWriter out = resp.getWriter();
​
        //服务器从客户端获取cookie
        Cookie[] cookies = req.getCookies();  //返回的数组说明Cookie可能存在多个
​
        //判断cookie是否存在
        if (cookies!=null){
            out.write("你上一次访问的时间是:");
            //存在,则遍历cookie数组
            for (int i = 0; i < cookies.length; i++) {
                //判断cookie的key是否和,相应给客户端的key相同
                if (cookies[i].getName().equals("lastTime")) {
                    //相同,获取cookie的值
                    String value = cookies[i].getValue();
                    long l = Long.parseLong(value);   //转换成长整型
                    Date date = new Date(l);   //将长整型转化为时间型
                    out.write(date.toString());
                }
            }
        }else{
            out.write("这是你第一次访问本站");
        }
​
        //服务器给客户端响应一个cookie
        Cookie cookie = new Cookie("lastTime", System.currentTimeMillis()+"");  //创建一个Cookie
        resp.addCookie(cookie);   //相应给客户端
​
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

image-20221015204621872

当你一打开浏览器,浏览器会创建一个Cookie为JSESSIONID,如下图

image-20221015204927903

所以当你第一次访问这个网站,cookie数组不会为空,也就不会打印出”这是你第一次访问本站“这句话

当你关闭浏览器,再次打开浏览器,再次访问该网站,发现cookie没有了。

 

给Cookie设置有效期

//服务器给客户端响应一个cookie
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis()+"");  //创建一个Cookie
//给Cookie设置有效期为一天
cookie.setMaxAge(24*60*60);
resp.addCookie(cookie);   //相应给客户端

当你关闭浏览器,cookie不会被清空了,有效期为1天

 

  • 删除Cookie

    • 不设置有效期,关闭浏览器,自动失效

    • 设置有效期时间为0,立即失效。

 

  • 关于Cookie

    • 一个Cookie只能保存一个信息

    • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie

    • Cookie大小有限制,为4kb

    • 浏览器上限为300个Cookie

 

编码解码:

 //编码
URLEncoder.encode("张三","utf-8");
//解码
URLDecoder.decode("张三","utf-8");
posted @ 2022-10-15 21:00  GrowthRoad  阅读(26)  评论(0编辑  收藏  举报