http cookie的作用学习

1.介绍

HTTP Cookie服务器发送给客户端(浏览器)的一小段数据 ,它会被客户端存储,并在后续请求时自动携带,以便服务器识别用户、保持会话状态或存储用户偏好等信息。

流程:

  1. 服务器发送 Cookie

服务器在 HTTP 响应中返回 Set-Cookie 头,将 Cookie 发送到客户端:

html 复制代码
HTTP/1.1 200 OK
Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure
  • 客户端存储 Cookie
    • 浏览器或 HTTP 客户端会自动存储服务器发送的 Cookie。
  • 客户端在后续请求中携带 Cookie
bash 复制代码
GET /dashboard HTTP/1.1
Cookie: session_id=abc123
  • 服务器解析 Cookie
    • 服务器读取 session_id=abc123,识别用户身份,并返回相应的页面数据。

2.用途

在python中获取cookie:

python 复制代码
import requests

# 发送请求
response = requests.get("https://example.com")

# 获取 Cookie
cookies = response.cookies
print(cookies.get_dict())  # 输出所有 Cookie

2.1 个性化设置

用户偏好设置(如主题颜色、语言)可以存储在 Cookie 里,这样用户下次访问网站时,服务器或前端代码可以读取 Cookie 并自动应用之前的设置。例如,服务端返回cookie:

html 复制代码
HTTP/1.1 200 OK
Set-Cookie: theme=dark; Max-Age=31536000; Path=/; Secure; HttpOnly
Set-Cookie: lang=zh-CN; Max-Age=31536000; Path=/; Secure; HttpOnly
  • theme=dark:用户选择了 深色模式
  • lang=zh-CN:用户选择了 简体中文
  • Max-Age=31536000:Cookie 有效期为一年(365 天 × 24 小时 × 60 分钟 × 60 秒)。
  • Path=/:适用于整个网站。
  • Secure:仅 HTTPS 传输,防止中间人攻击。
  • HttpOnly:前端 JavaScript 无法修改 ,只能由服务器管理(如果需要前端修改,就不要加 HttpOnly)。

下次请求时携带该cookie:

html 复制代码
GET /dashboard HTTP/1.1
Cookie: theme=dark; lang=zh-CN

服务器可以读取这些 Cookie,直接渲染用户上次选择的主题和语言。

2.2 跟踪分析用户

网站可以利用 HTTP Cookie 追踪用户行为,比如:

  • 统计用户访问次数、页面停留时间。
  • 记录用户点击的广告、搜索过的商品。
  • 在不同页面、甚至不同网站间跟踪同一用户(如广告投放)。

主要是根据cookie里的唯一user_id做监控的。例子,后端服务器可以在用户访问时创建一个 唯一用户 ID(UUID),然后存储在 Cookie 里:

python 复制代码
from flask import Flask, request, make_response
import uuid

app = Flask(__name__)

@app.route('/')
def track_user():
    user_id = request.cookies.get("user_id")
    
    if not user_id:
        # 生成唯一用户 ID
        user_id = str(uuid.uuid4())
    
    # 记录访问日志(可存入数据库)
    print(f"User {user_id} visited {request.path}")

    # 设置 Cookie
    response = make_response("Tracking User")
    response.set_cookie("user_id", user_id, max_age=31536000, secure=True, httponly=True)

    return response

if __name__ == '__main__':
    app.run(debug=True)
  • 如果用户是第一次访问 ,服务器分配 user_id 并存入 Cookie。
  • 之后每次访问,服务器都能识别是同一用户

2.3 第三方cookie

  • 第一方 Cookie :由 当前访问的网站(同源) 设置。例如:
    • 你访问 example.com,它在 example.com 域下存储 Cookie。
  • 第三方 Cookie :由 非当前访问网站的第三方(不同域名) 设置。例如:
    • 你访问 news.com,但 adserver.com(广告商) 通过网页上的广告js脚本 adserver.com 域下存储 Cookie,用于跨网站追踪。

news.com和shopping.com都引入了adserver.com 提供的广告:

html 复制代码
<img src="https://adserver.com/ad.png" />
<script src="https://adserver.com/track.js"></script>

当浏览器加载 track.js 时,会向 adserver.com 发送一个请求:

html 复制代码
GET /track.js HTTP/1.1
Host: adserver.com

adserver.com 服务器响应并设置 Cookie:

html 复制代码
HTTP/1.1 200 OK
Set-Cookie: user_id=abcd1234; Domain=adserver.com; Path=/; Max-Age=31536000

在访问不同的网站时,同一个用户都返回了相同的第三方user_id,这样第三方网站就能知道是同一个用户,可以做一些个性化广告推送。

2.4 会话管理

使用 Cookie 进行会话管理,session_id 泄露会有危险,可能导致会话劫持(Session Hijacking),攻击者可以冒充你的身份登录目标网站。

XSS(跨站脚本攻击)、 网络监听(MITM 攻击)、CSRF(跨站请求伪造)

获取别人的 Cookie 未经授权是非法的。

相关推荐
防火墙在线1 小时前
前后端通信加解密(Web Crypto API )
前端·vue.js·网络协议·node.js·express
烤麻辣烫4 小时前
黑马程序员苍穹外卖(新手)Day1
java·数据库·spring boot·学习·mybatis
提娜米苏4 小时前
Bash Shell脚本学习——唇读数据集验证脚本
开发语言·学习·bash
老蒋新思维6 小时前
2025 创客匠人全球创始人 IP + AI 万人高峰论坛:破局创业困境,拥抱无限未来
大数据·网络·人工智能·网络协议·tcp/ip·创客匠人·知识变现
0和1的舞者6 小时前
网络通信的奥秘:HTTP详解 (六)
网络·网络协议·计算机网络·http·https·计算机科学与技术
xwz小王子6 小时前
PerAct2:机器人双臂操作任务的基准测试和学习
学习·机器人
敢敢のwings6 小时前
AnyVP*:企业级远程办公SSL深度技术解析
网络·网络协议·ssl
d111111111d7 小时前
STM32外设学习--DMA直接存储器读取--学习笔记。
笔记·stm32·单片机·嵌入式硬件·学习
Yefimov7 小时前
8. DPDK:多队列与流分类
后端·网络协议
on_pluto_7 小时前
【推荐系统14】数据分析:以阿里天池新闻推荐为例学习
人工智能·学习·数据挖掘·数据分析·推荐算法