小 cookie,大作用:探索网站中的隐私追踪器(上)

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • 一、引言
    • 介绍 `cookie` 的概念和作用
  • 二、 `cookie` 的基础知识
    • 解释 `cookie` 的定义和工作原理
    • 介绍 `cookie` 的类型:会话 `cookie` 和持久 `cookie`
    • 讨论 `cookie` 的用途,如会话管理、个性化设置等
  • 三、 `cookie` 的设置和获取
    • 演示如何在服务器端设置 `cookie`
    • 介绍如何在客户端通过 JavaScript 获取和操作 `cookie`

一、引言

介绍 cookie 的概念和作用

Cookie一种由服务器发送给客户端(通常是浏览器)的小文本文件,用于存储一些与用户相关的信息Cookie通常包含一个唯一的标识符(Cookie ID)以及一些其他的元数据,如过期时间、创建时间、路径等。

Cookie的主要作用包括:

  1. 会话管理Cookie可以用于在服务器端跟踪用户的会话。当用户登录到一个网站时,服务器可以向用户的浏览器发送一个包含登录信息的Cookie。在后续的请求中,浏览器会自动将该Cookie发送给服务器,以便服务器验证用户的身份。

  2. 个性化设置:网站可以使用Cookie来存储用户的偏好设置,如语言、字体大小、主题等。这样,当用户再次访问该网站时,网站可以根据Cookie中存储的信息为用户提供个性化的体验。

  3. 广告追踪:广告商可以使用Cookie来跟踪用户在多个网站上的浏览行为,以便向用户展示相关的广告。

  4. 分析和统计:网站所有者可以使用Cookie来收集用户的浏览行为数据,如访问页面的数量、停留时间等,以便进行网站分析和统计。

需要注意的是,Cookie可能会涉及到用户的隐私问题,因此一些浏览器提供了隐私设置,允许用户控制是否接受Cookie以及如何处理Cookie。同时,网站也需要在使用Cookie时遵循相关的法律法规,如欧盟的《通用数据保护条例》(GDPR)等。

二、 cookie 的基础知识

解释 cookie 的定义和工作原理

Cookie是由服务器发送到用户浏览器并保存在本地的一小段文本数据。它包含了一个唯一的标识符(Cookie ID)以及一些其他信息,如过期时间、创建时间、路径等。

Cookie的工作原理如下:

  1. 当用户首次访问一个网站时,服务器会在响应中发送一个Set-Cookie头部,其中包含了一个Cookie的值。

  2. 浏览器接收到该响应后,会将Cookie存储在本地。在后续的请求中,浏览器会自动将该Cookie包含在请求的Cookie头部中,发送给服务器。

  3. 服务器接收到请求后,可以通过解析Cookie头部获取到之前发送的Cookie值。服务器可以使用该Cookie值来识别用户、跟踪用户的会话或存储用户的偏好设置等信息。

  4. Cookie的过期时间决定了它在浏览器中保留的时间。当过期时间到达时,浏览器会自动删除该Cookie。如果没有设置过期时间,则Cookie会在浏览器关闭时被删除。

需要注意的是,Cookie是基于浏览器的,并且只能被发送给设置了Cookie的同一域名下的服务器。此外,浏览器通常会限制每个域名可以存储的Cookie数量以及总大小。因此,在使用Cookie时需要考虑到这些限制。

介绍 cookie 的类型:会话 cookie 和持久 cookie

根据过期时间的不同,Cookie可以分为两种类型:会话Cookie和持久Cookie

  1. 会话Cookie:会话Cookie是一种临时的Cookie,它在用户关闭浏览器或会话结束时自动失效。会话Cookie用于在用户的会话期间保持状态,例如在购物车中添加商品或登录到网站时。

  2. 持久Cookie:持久Cookie是一种在浏览器中保存较长时间的Cookie,它的过期时间可以设置为几天、几个月甚至几年。持久Cookie常用于存储用户的偏好设置、登录状态等信息,以便用户在下次访问网站时可以自动恢复这些设置。

无论是会话Cookie还是持久Cookie,它们都可以在浏览器中被访问和修改。然而,需要注意的是,用户可以通过浏览器设置来禁用Cookie,或者在使用完浏览器后清除Cookie。因此,在开发网站时,需要考虑到Cookie的使用和用户的隐私问题。

讨论 cookie 的用途,如会话管理、个性化设置等

Cookie在 Web 开发中有许多用途,包括会话管理、个性化设置、广告追踪和分析等。下面是一些常见的Cookie用途:

  1. 会话管理Cookie可以用于跟踪用户的会话。当用户登录到一个网站时,服务器可以向用户的浏览器发送一个包含会话标识符的Cookie。在后续的请求中,浏览器会自动将该Cookie发送给服务器,以便服务器识别用户的会话并保持用户的登录状态。

  2. 个性化设置:网站可以使用Cookie来存储用户的偏好设置,如语言、字体大小、主题等。这样,当用户再次访问该网站时,网站可以根据Cookie中存储的信息为用户提供个性化的体验。

  3. 广告追踪:广告商可以使用Cookie来跟踪用户在多个网站上的浏览行为,以便向用户展示相关的广告。通过分析用户的浏览历史和兴趣,广告商可以更精准地投放广告,提高广告的点击率和转化率。

  4. 分析和统计:网站所有者可以使用Cookie来收集用户的浏览行为数据,如访问页面的数量、停留时间等。这些数据可以用于分析网站的流量、用户行为和优化网站的设计和内容。

需要注意的是,Cookie可能会涉及到用户的隐私问题,因此一些浏览器提供了隐私设置,允许用户控制是否接受Cookie以及如何处理Cookie。同时,网站也需要在使用Cookie时遵循相关的法律法规,如欧盟的《通用数据保护条例》(GDPR)等。

三、 cookie 的设置和获取

演示如何在服务器端设置 cookie

在服务器端设置cookie通常使用 HTTP 响应的Set-Cookie头部。下面是一个简单的 Python 示例,演示如何在服务器端设置cookie

import http.server
import socketserver

# 设置 cookie
def set_cookie(response, name, value, max_age=3600):
    response.headers.add("Set-Cookie", f"{name}={value}; max-age={max_age}")

# 处理请求
def handle_request(client_request):
    response = http.server.SimpleHTTPRequestHandler(client_request)
    set_cookie(response, "my_cookie", "my_value")
    return response

# 创建服务器并监听指定端口
with socketserver.TCPServer(("", 8000), handle_request) as httpd:
    print(f"Serving at port 8000...")
    # 启动服务器,按 Ctrl+C 停止
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        print("Server stopped.")

在上面的示例中,我们使用 Python 的内置模块http.serversocketserver创建了一个简单的 HTTP 服务器。当客户端发送请求到该服务器时,我们使用set_cookie函数设置了一个名为my_cookiecookie,其值为my_value,过期时间为 3600 秒(1 小时)。然后,服务器将包含Set-Cookie头部的响应发送给客户端。

请注意,这只是一个简单的示例,用于演示在服务器端设置cookie的基本概念。在实际应用中,你可能需要使用更复杂的框架或库来处理 HTTP 请求和响应,并设置cookie

介绍如何在客户端通过 JavaScript 获取和操作 cookie

在客户端(通常是指浏览器)通过 JavaScript 获取和操作cookie的方法如下:

  1. 获取cookie 使用document.cookie属性可以获取所有存储在浏览器中的cookie。该属性返回一个包含所有cookie的字符串,每个cookie以分号(;)分隔。例如:
var cookies = document.cookie;

要获取特定的cookie,可以使用字符串的split()方法结合正则表达式来提取。例如,要获取名为"myCookie"的cookie的值,可以使用以下代码:

var cookieName = "myCookie";
var cookieValue = document.cookie.split("; ")[0].split("=")[1];

console.log(cookieValue);
  1. 设置cookie 可以使用document.cookie属性来设置新的cookie或更新已存在的cookie。设置cookie时,需要指定cookie的名称、值和其他可选属性,例如过期时间、路径等。例如,要设置一个名为"myCookie"的cookie,其值为"myValue",过期时间为 7 天,可以使用以下代码:
var cookieName = "myCookie";
var cookieValue = "myValue";
var expireDate = new Date();
expireDate.setTime(expireDate.getTime() + 7 * 24 * 60 * 60 * 1000);

document.cookie = `${cookieName}=${cookieValue}; expires=${expireDate.toUTCString()}; path=/`;
  1. 删除cookie 要删除已存在的cookie,可以将其过期时间设置为过去的时间。例如,要删除名为"myCookie"的cookie,可以使用以下代码:
var cookieName = "myCookie";
var expireDate = new Date();
expireDate.setTime(expireDate.getTime() - 1);

document.cookie = `${cookieName}=; expires=${expireDate.toUTCString()}; path=/`;

需要注意的是,通过 JavaScript 设置或删除cookie可能会受到浏览器的安全设置和同源策略的限制。某些浏览器可能会限制第三方脚本对cookie的操作,或者要求cookie的域名与当前页面的域名相同。在实际应用中,需要考虑这些因素,并确保你的代码在目标浏览器和环境中正常工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/250902.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布

目录 一、实验 1.蓝绿发布准备 2.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前端应用的蓝绿发布 二、问题 1.手动构建Jenkins前端项目CI流水线报错 2.如何优化手动构建流水线选项参数 一、实验 1.蓝绿发布准备 (1)环境 表1 蓝绿发布…

flume:Ncat: Connection refused.

一:nc -lk 44444 和 nc localhost 44444区别 nc -lk 44444 和 nc localhost 44444 是使用 nc 命令进行网络通信时的两种不同方式。 1. nc -lk 44444: - 这个命令表示在本地监听指定端口(44444)并接受传入的连接。 - -l 选项…

前端视角看 Docker : 基础命令全面指南

引言 Docker是一种开源的容器化平台,它允许开发者将应用程序和其依赖打包在一个轻量级的、可移植的容器中。这使得应用程序在不同的环境中部署变得简单且高效。本文将介绍Docker的一些基础命令和概念,帮助初学者快速上手。 1. Docker简介 Docker使用…

054:vue工具 --- BASE64加密解密互相转换

第054个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

云原生之深入解析使用Telepresence轻松在本地调试和开发Kubernetes应用程序

一、 准备 telepresence 下载:https://www.telepresence.io/docs/latest/install/kubectl 下载:https://kubernetes.io/docs/tasks/tools/ 二、版本检测 $telepresence version Client: v2.5.3 (api v3) Root Daemon: not running User Daemon: not r…

css文本样式的使用

在CSS中,可以通过以下属性来设置文本的样式: color:设置文本的颜色。 p {color: red; }效果图: font-size:设置文本的字体大小。 p {font-size: 16px; }效果图: font-family:设置文本的字…

uniGUI学习之UniHTMLMemo1富文本编辑器

1]系统自带的富文本编辑器 2]jQueryBootstarp富文本编辑器插件summernote.js 1]系统自带的富文本编辑器 1、末尾增加<p> 2、增加字体 3、解决滚屏问题 4、输入长度限制问题 5、显示 并 编辑 HTML源代码(主要是图片处理) 1、末尾增加<p> UniHTMLMemo1.Lines…

【星环云课堂大数据实验】kafka消息发布与订阅

文章目录 一、Kafka概述二、实验环境三、实验准备四、实验目的五、实验步骤5.1、创建Kafka Topic5.2、Kafka消息发布5.3、Kafka消息订阅 六、实验感悟 一、Kafka概述 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。该项目的目标是为处理实…

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用

目录 一、实验 1.部署Ansible自动化运维工具 2.K8S 节点安装nginx 3.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用 二、问题 1.ansible安装报错 2.ansible远程ping失败 3. Jenkins流水线通过ansible命令直接ping多台机器的网络状态报错 一、实验 …

Hadoop分布式配置小白篇(附加各阶段问题解决方式)

看的黑马的课&#xff0c;记录一下配置步骤 目录 1.VMware安装&#xff1a; 方法1&#xff1a; 方法2&#xff1a; 2.创建虚拟机 1.ISO镜像文件获取&#xff08;CentOS&#xff09;&#xff1a; 2.创建&#xff08;简略步骤&#xff09; 3.克隆虚拟机&#xff08;克隆伪…

idea第一次提交到git(码云)

1.先创建一个仓库 2.将idea和仓库地址绑定 2.将idea和仓库地址绑定

《Kotlin核心编程》笔记:集合、序列与内联函数

集合的高阶函数API map 操作 val list listOf(1, 2, 3, 4, 5, 6) val newList list.map { it * 2 }当然&#xff0c;在 Java 8 中&#xff0c;现在也能像Kotlin那样去操作集合了。 上面的方法实际上就是一个高阶函数&#xff0c;它接收的参数实际上就是一个函数&#xff0…

使用Pytorch从零开始构建LoRA

引言 在这篇博文中&#xff0c;我将向大家展示如何使用Pytorch从头开始构建 LoRA。LoRA 是Low-Rank Adaptation或Low-Rank Adapters的缩写&#xff0c;它提供了一种高效且轻量级的方法来微调预先存在的语言模型。这包括BERT和RoBERTa等掩码语言模型&#xff0c;以及GPT、Llama…

微服务实战系列之ZooKeeper(中)

前言 昨日博主的第一篇ZooKeeper&#xff0c;对它自身具备的能力做了初步介绍。书接上文&#xff0c;马不停蹄&#xff0c;我们继续挖掘它内在的美&#xff0c;充分把握它的核心与脉络。 揭秘ZooKeeper Q&#xff1a;集群一致性协同是如何进行的 我们讲到分布式&#xff0c;…

Linux--LAMP 平台部署及应用

5.1 LAMP平台概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统&#xff0c;Apache 网站服务器、MySQL数据库服务器&…

modbus 通信协议介绍与我的测试经验分享

1、简介 Modbus 协议是一种通信协议&#xff0c;用于工业自动化系统中的设备间通信。该协议最初由 Modicon 公司开发&#xff0c;并于 1979 年发布。 Modbus 协议通过串行通信格式进行通信&#xff0c;在物理层上支持 RS-232、RS-422 和 RS-485 等多种通信方式。在协议层面&am…

python3GUI--仿win风格天气By:PyQt5

文章目录 一&#xff0e;前言二&#xff0e;展示1.首页-白色1.首页-白色22.首页-黑色3.天气预报视频4.天气资讯-白色5.天气资讯-黑色6.收藏夹-白色7.收藏夹-黑色8.搜索9.mini-白色10.mini-黑色11.光遇天气 三&#xff0e;心得四&#xff0e;总结五&#xff0e;参考 一&#xff…

软件设计师——计算机网络(三)

&#x1f4d1;前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1…

uniapp之屏幕右侧出现滚动条去掉、隐藏、删除【好用!】

目录 问题解决大佬地址最后 问题 解决 在最外层view上加上class“content”;输入以下样式。注意&#xff1a;两个都必须存在在生效。 .content {/* 跟屏幕高度一样高,不管view中有没有内容,都撑开屏幕高的高度 */height: 100vh; overflow: auto; } .content::-webkit-scrollb…

【JavaWeb】往浏览器打印一个hello world

上集:建一个web项目 第一步&#xff1a;建好Servlet类的文件 右键src&#xff0c;建一个class 就行 第二步&#xff1a;编代码 可以直接复制粘贴 用来测试的类 import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; //↓是注解&#xff0…