小 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的域名与当前页面的域名相同。在实际应用中,需要考虑这些因素,并确保你的代码在目标浏览器和环境中正常工作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大华 DSS 数字监控系统 itcBulletin SQL 注入漏洞复现

0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 /portal/services/itcBulletin 路由发送特殊构造的数据包,利用报错注入获取数据库…

springboot——定时任务、异步任务

springboot——定时任务、异步任务 一、定时任务1、创建一个定时任务、时间配置文件2、springboot主程序开启定时任务 EnableScheduling3、使用 Scheduled 注解 二、定时任务、异步执行。1、springboot主程序开启异步任务 EnableAsync2、方法上增加 Async 注解,标识…

【JAVA日志框架】JUL,JDK原生日志框架详解。

前言 Java日志体系混乱?Java日志框架系列,清晰简洁整理好整个Java的日志框架体系。第一篇,JDK原生日志框架——JUL。 目录 1.概述 2.日志级别 3.配置 4.继承关系 1.概述 日志框架的核心问题: 日志是用来记录应用的一些运行…

.NET基础面试题一

1.C#中堆和栈的区别? 堆(Heap)和栈(Stack)是C#中两种分配内存的不同方式 栈(Stack):是一种先进后出的内存分配方式。它用于存储基本数据类型和对象引用,它是一种连续的内存空间,存储在cpu的寄存器上,它的大小在编译的时就是已知的…

nodejs+vue+微信小程序+python+PHP校园二手交易系统的设计与实现-计算机毕业设计推荐

(2)管理员 进行维护,以及平台的后台管理工作都依靠管理员,其可以对信息进行管理。需具备功能有;首页、个人中心、学生管理、物品分类管理、物品信息管理、心愿贴、系统管理、订单管理等功能。系统分成管理员控制模块和学生模块。 本系统有良好…

pyansys环境配置(安装所需的库)

目录 1. 环境配置: 2. pyansys库配合Ansys软件启动代码 1. 环境配置: 试了好多种版本,最终以下版本可以跑通: 注意:Python和ANSYS的版本也会影响到安装包的版本,我使用的配置如下: Python3.9…

maven+spock

pom配置 话说JunitMockito的组合用起来是真难用&#xff0c;还是Spock的简单&#xff0c;尤其是参数化的测试。junit的Parameter是鸡肋&#xff0c;杂恶心&#xff1b;Theories用来也不爽。 <?xml version"1.0" encoding"UTF-8"?><project xm…

linux ioctl

ioctl 接口介绍 大部分驱动需要 -- 除了读写设备的能力 -- 通过设备驱动进行各种硬件控制的能力. 大 部分设备可进行超出简单的数据传输之外的操作; 用户空间必须常常能够请求, 例如, 设 备锁上它的门, 弹出它的介质, 报告错误信息, 改变波特率, 或者自我销毁. 这些操作常 常通…

【大数据】Doris 的集群规划和环境准备

Doris 的集群规划和环境准备 1.1 环境要求1.1 Linux 操作系统版本需求1.2 软件需求 1.2 硬件要求1.3 节点规划1.4 通信端口1.5 IP 地址绑定 Doris 作为一款开源的 MPP 架构 OLAP 数据库&#xff0c;能够运行在绝大多数主流的商用服务器上。为了能够充分运用 MPP 架构的并发优势…

Spring容器中scope为prototype类型Bean的回收机制

文章目录 一、背景二、AutowireCapableBeanFactory 方法 autowireBean 分析三、Spring 容器中 scope 为 prototype 类型 Bean 的回收机制四、总结 一、背景 最近做 DDD 实践时&#xff0c;遇到业务对象需要交给 Spring 管理才能做一些职责内事情。假设账号注册邮箱应用层代码流…

Flask学习三:模型操作

ORM flask 通过Model操作数据库&#xff0c;不管你的数据库是MySQL还是Sqlite&#xff0c;flask自动帮你生成相应数据库类型的sql语句&#xff0c;所以不需要关注sql语句和类型&#xff0c;对数据的操作flask帮我们自动完成&#xff0c;只需要会写Model就可以了 flask使用对象关…

第十五章总结

一.输入/输出流 1.输入流 InputStrema类是字节输入流的抽象类&#xff0c;它是所有字节输入流的父类。 该类中所有方法遇到错误都会引发IOException异常。 read()方法&#xff1a;从输入流中读取数据的下一个字节。返回0~255的int字节值。如果因为已经到达流末尾而没有可用的…

vue3通过provide与inject我们可以把父组件数据传递N个层级的子组件

vue3 provide 与 inject 我们通过props属性可以把数据传给组件&#xff0c;而通过provide与inject我们可以把数据传递给N个层级的子组件&#xff0c;比如A组件用了B组件&#xff0c;B组件用了C组件&#xff0c;它可以把组件直接从A传给C组件,vue2使用computed来实现响应式,而v…

【模块化】 js 模块化(CommonJS, AMD, UMD, CMD, ES6)

目录 js 的演变模块化1. CommonJS 规范commonJs伪代码⭐CommonJS优缺点 2. AMD 规范⭐AMD 优缺点 3. UMD 规范⭐UMD AMD CommonJS 4. CMD 规范⭐CMD 优缺点 5. ES6 模块化符号绑定⭐ESM 优缺点 AMD 和 CMD 的区别ES6 模块与 CommonJS 模块的差异参考 将介绍几种 js 模块化的规…

新能源汽车的“一池春水”,或许不再由价格战掀起波澜?

2005年12月15日&#xff0c;丰田普锐斯混合动力车进入中国&#xff0c;拉开了国内新能源汽车发展的序幕。18年后的今天&#xff0c;国产及进口的新能源汽车已经渗透我国超三分之一的乘用车市场&#xff0c;与油车二分天下的愿景渐趋实现。 今年11月&#xff0c;随着购车需求进…

npm install老是卡住是什么问题

最简单的vue项目我install的时候都出现了问题,给我苦恼的,经过我的仔细对比发现: 从网上搜索的这个镜像源是存在问题的,很多资源是下载不了的,没有深究为什么,就这个淘宝的: npm config set registry https://registry.npm.taobao.org/ 换成下面的这个国内镜像源就好了 n…

轻量封装WebGPU渲染系统示例<50>- Json数据描述材质等场景信息

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/DataDrivenScene2.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: json场景数据: {"renderer": {"mtplE…

RecyclerView中的设计模式解读

一.观察者模式&#xff1a;&#xff08;待完善&#xff0c;这个写的不咋地&#xff0c;没理解透彻&#xff09; 1.观察者模式的概念&#xff1a; &#xff08;1&#xff09;消息传递方向&#xff1a;被观察者->观察者 &#xff08;2&#xff09;代码实现&#xff1a; 首…

105基于matlab的阶次分析算法

基于matlab的阶次分析算法&#xff0c;用于变转速机械故障特征提取&#xff0c;可运行&#xff0c;包含寻找脉冲时刻&#xff0c;等角度时刻。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 105阶次分析变转速信号处理 (xiaohongshu.com)

【华为数据之道学习笔记】5-5结构化数据入湖

结构化数据是指由二维表结构来逻辑表达和实现的数据&#xff0c;严格遵循数据格式与长度规范&#xff0c;主要通过关系型数据库进行存储和管理。 触发结构化数据入湖的场景有两种&#xff1a;第一&#xff0c;企业数据管理组织基于业务需求主动规划和统筹&#xff1b;第二&…