深入解析浏览器Cookie(图文码教学)

news/2024/11/7 22:49:27/

深入解析浏览器Cookie

  • 前言
  • 一、什么是 Cookie?
  • 二、Cookie的特点
  • 二、如何创建 Cookie?
  • 三、服务器如何获取 Cookie
  • 四、Cookie 值的修改
      • 4.1 方案一
      • 4.2 方案二
  • 五、浏览器查看 Cookie
  • 六、Cookie 生命控制
  • 七、Cookie 有效路径 Path 的设置
  • 八、案例:Cookie 练习---免输入用户名登录



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!
也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!


一、什么是 Cookie?

  1. Cookie 翻译过来是饼干的意思。
  2. Cookie是一种用于在客户端浏览器和服务器之间进行状态跟踪的技术。当用户访问一个网站时,服务器将一小段用于标识用户和跟踪用户访问行为的信息发送到用户的浏览器,浏览器将这些信息存储在用户的计算机上。然后,在用户下次访问该网站时,浏览器会将这些信息发送回服务器,从而实现用户的状态跟踪。
  3. Cookie 是服务器通知客户端保存键值对的一种技术。
  4. 客户端有了 Cookie 后,每次请求都发送给服务器。
  5. 每个 Cookie 的大小不能超过 4kb

二、Cookie的特点

Cookie的特点包括:

  1. 持久性:Cookie可以设置一个过期时间,在这个时间之前,浏览器会持续保存该Cookie并在用户下次访问网站时发送回服务器。这使得网站可以长期跟踪用户的行为和偏好。

  2. 可扩展性:Cookie可以存储任意类型的数据,如用户标识、用户首选项等。这使得网站可以根据用户的需求和行为来提供个性化的服务。

  3. 安全性:Cookie可以设置为只在通过安全连接(如HTTPS)时传输,或者只能通过服务器访问,从而增加了一定的安全性。

  4. 灵活性:Cookie可以通过设置路径和域来限制它们的作用范围,使得不同的网页或子域可以拥有各自的Cookie。

总的来说,Cookie在互联网应用中起到了重要的作用,它可以实现用户的状态跟踪和个性化服务。然而,由于Cookie会在用户计算机上存储一些个人信息,因此也引发了一些安全和隐私的问题。

二、如何创建 Cookie?

在这里插入图片描述

public class CookieServlet extends BaseServlet {protected void createCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.创建cookie对象Cookie cookie1 = new Cookie("key4","value4");//2. 通知客户端保存Cookieresp.addCookie(cookie1);//1. 创建cookie对象Cookie cookie2 = new Cookie("key5","value5");//2. 通知客户端保存Cookieresp.addCookie(cookie2);resp.getWriter().write("Cookie创建成功"); }
}

三、服务器如何获取 Cookie

服务器获取客户端的 Cookie 只需要一行代码:req.getCookies():Cookie[]
在这里插入图片描述

public class CookieUtils {/*** 查找指定名称的Cookie对象* @param name* @param cookies* @return*/public static Cookie findCookie(String name , Cookie[] cookies){if (name == null || cookies == null || cookies.length == 0) {return null;}for (Cookie cookie : cookies) {if (name.equals(cookie.getName())) {return cookie;}}return null;}}

Servlet :

protected void getCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie[] cookies = req.getCookies();for (Cookie cookie : cookies) {// getName方法返回Cookie的key(名)// getValue方法返回Cookie的value值resp.getWriter().write("Cookie[" + cookie.getName() + "=" + cookie.getValue() + "] <br/>");}Cookie iWantCookie = CookieUtils.findCookie("key1", cookies);//        for (Cookie cookie : cookies) {
//            if ("key2".equals(cookie.getName())) {
//                iWantCookie = cookie;
//                break;
//            }
//        }// 如果不等于null,说明赋过值,也就是找到了需要的Cookieif (iWantCookie != null) {resp.getWriter().write("找到了需要的Cookie");}}

四、Cookie 值的修改

4.1 方案一

  1. 先创建一个要修改的同名(指的就是 key)的 Cookie 对象
  2. 在构造器,同时赋于新的 Cookie 值。
  3. 调用 response.addCookie( Cookie );

4.2 方案二

  1. 先查找到需要修改的 Cookie 对象
  2. 调用 setValue()方法赋于新的 Cookie 值。
  3. 调用 response.addCookie()通知客户端保存修改
protected void updateCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        方案一:
//        1、先创建一个要修改的同名的Cookie对象
//        2、在构造器,同时赋于新的Cookie值。Cookie cookie = new Cookie("key1","newValue1");
//        3、调用response.addCookie( Cookie ); 通知 客户端 保存修改resp.addCookie(cookie);//        方案二:
//        1、先查找到需要修改的Cookie对象Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());if (cookie != null) {
//            2、调用setValue()方法赋于新的Cookie值。cookie.setValue("newValue2");//值不能为中文,除非必须使用base64编码
//        3、调用response.addCookie()通知客户端保存修改resp.addCookie(cookie);}resp.getWriter().write("key1的Cookie已经修改好");}

五、浏览器查看 Cookie

谷歌浏览器如何查看 Cookie:
在这里插入图片描述
火狐浏览器如何查看 Cookie:
在这里插入图片描述
edge浏览器如何查看 Cookie:
在这里插入图片描述

六、Cookie 生命控制

  1. Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)
  2. setMaxAge()
    • 正数,表示在指定的秒数后过期
    • 负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
    • 零,表示马上删除 Cookie
 /*** 设置存活1个小时的Cooie* @param req* @param resp* @throws ServletException* @throws IOException*/protected void life3600(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = new Cookie("life3600", "life3600");cookie.setMaxAge(60 * 60); // 设置Cookie一小时之后被删除。无效resp.addCookie(cookie);resp.getWriter().write("已经创建了一个存活一小时的Cookie");}/*** 马上删除一个Cookie* @param req* @param resp* @throws ServletException* @throws IOException*/protected void deleteNow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 先找到你要删除的Cookie对象Cookie cookie = CookieUtils.findCookie("key4", req.getCookies());if (cookie != null) {// 调用setMaxAge(0);cookie.setMaxAge(0); // 表示马上删除,都不需要等待浏览器关闭// 调用response.addCookie(cookie);resp.addCookie(cookie);resp.getWriter().write("key4的Cookie已经被删除");}}/*** 默认的会话级别的Cookie* @param req* @param resp* @throws ServletException* @throws IOException*/protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = new Cookie("defalutLife","defaultLife");cookie.setMaxAge(-1);//设置存活时间resp.addCookie(cookie);}

七、Cookie 有效路径 Path 的设置

  1. Cookie 的有效路径(Path)指定了哪些路径下发送的请求会附带该 Cookie。只有与 Cookie 的有效路径匹配的请求才会携带该 Cookie。

常见的可选值有以下几种:

  • 默认值(/):表示服务器的根路径,所有请求都会携带该 Cookie;
  • 特定路径:例如,设置为 /myapp 表示只有路径以 /myapp 开头的请求会携带该 Cookie;
  • 精确路径:例如,设置为 /myapp/index.html 表示只有请求路径为 /myapp/index.html 的请求会携带该 Cookie;
  • 目录路径(目录名后带斜杠):例如,设置为 /myapp/ 表示只有路径以 /myapp/ 开头的请求会携带该 Cookie。例如,请求路径为 /myapp/page1 或者 /myapp/page2 都会携带该 Cookie。
  1. 注意事项:

    • Cookie 的有效路径是以斜杠 / 开头的路径字符串。
    • 如果不指定有效路径,默认为根路径,即所有请求都会携带该 Cookie。
    • Cookie 只会被发送到与其有效路径匹配的请求中。
    • 如果请求路径包含多个目录,例如 /myapp/subfolder/page.html,则该请求会携带该路径下的所有符合条件的 Cookie。
  2. 有效路径的设置可以帮助服务器控制哪些请求会附带 Cookie,从而实现更精确的控制和提高安全性。

  3. 举例:

CookieA path=/工程路径
CookieB path=/工程路径/abc

举例一:
请求地址如下: http://ip:port/工程路径/a.html
CookieA 发送
CookieB 不发送
举例二:
http://ip:port/工程路径/abc/a.html
CookieA 发送
CookieB 发送

  protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie = new Cookie("path1", "path1");// getContextPath() ===>>>>  得到工程路径cookie.setPath( req.getContextPath() + "/abc" ); // ===>>>>  /工程路径/abcresp.addCookie(cookie);resp.getWriter().write("创建了一个带有Path路径的Cookie");}

八、案例:Cookie 练习—免输入用户名登录

在这里插入图片描述
login.jsp

<%--Created by IntelliJ IDEA.User: HeyDate: 2022/4/10Time: 19:55To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<form action="http://localhost:8080/13_cookie_session/LoginServlet" method="get">用户名:<input type="text" name="username"  value="${cookie.username.value}"/></br>密码:<input type="password" name="password"></br><input type="submit" value="提交">
</form></body>
</html>

loginServlet

public class loginServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("username");String password = request.getParameter("password");if("abc".equals(name)&&"123456".equals(password)){Cookie cookie = new Cookie("username","abc");response.addCookie(cookie);System.out.println("登陆成功!");cookie.setMaxAge(60*60*24*7);}else{System.out.println("登陆失败!");}}
}

http://www.ppmy.cn/news/934395.html

相关文章

2、程序的基本构成

上一节我们讲解了环境搭建的过程。这一节我们来讲程序的基本构成。 解决方案 首先是解决方案,即文中圈出的部分。 解决方案的本体,实际上也是一个文本文件 就是这个家伙 打开之后长这样,实际上就是表明了一些配置信息,解决方案中包含了哪些项目等 项目 然后是项目,跟解…

java se 下载

java1.8 下载网址 Java Archive Downloads - Java SE 8

电影下载全攻略 [初、中、高级]——老猫

电影下载全攻略 [初、中、高级]——老猫初级篇 出于保护版权的目的&#xff0c;RM和ASF这两种格式文件的播放器--RealPlay和MediaPlayer都没有提供SAVE AS选项。如果希望看完节目后在windows的临时文件目录找文件&#xff0c;也如同等待上天施舍一般&#xff0c;几乎不可能成功…

java程序 下载电影_用java实现的电影天堂,飘花电影网的电影的下载地址抓取

[Java] 纯文本查看 复制代码package downloade; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; i…

【实操】下载在线m3u8视频为本地mp4

效果图 &#xff08;方法1 - 不推荐&#xff09;360录屏方法步骤 简单但是要一直亮屏录制 下载360浏览器&#xff0c;打开在线观看网址点击视频窗口右上角“录制小视频”开始录制&#xff0c;保存 &#xff08;方法2 - 推荐&#xff09;命令行下载完整m3u8视频 麻烦&#x…

[Java] 用java实现的电影天堂,飘花电影网的电影的下载地址抓取

1.之前看了一些论坛上有一个坛友用python写的抓取电影下载链接的&#xff0c;于是心血来潮的我也打算用java来写一个&#xff01;其实并不是很难&#xff0c;下面附上代码这是对电影天堂的电影的抓取的方法&#xff0c;&#xff08;在此期间尝试设置代{过}{滤}理&#xff0c;以…

Java SE下载方式

输入网址&#xff1a;www.oracle.com进入到 点击Products 再点击java 点击后向下滑到下图 点击Download Java now 进入到 点击Java archive 向下滑到下图选择你需要的版本 这里我选择的是Java SE 17&#xff0c;点击后进入到 选择自己电脑的操作系统的版本 这里我选的是Window…

户外运动耳机怎么选?这几款耳机最适合在运动时佩戴!

随着人们开始追求运动和健身带来的乐趣&#xff0c;以及在运动过程中享受音乐的过程&#xff0c;耳机逐渐成为当下的刚需&#xff0c;其中骨传导耳机凭借防水防汗、佩戴稳固不掉落加上开放式聆听受到当下消费者的热烈欢迎&#xff0c;有优点就有缺点&#xff0c;由于骨传导耳机…