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 未经授权是非法的。

相关推荐
Chuncheng's blog5 分钟前
如何基于Mihomo Party http端口配置git与bash命令行代理
git·http·bash
贩卖纯净水.31 分钟前
webpack打包学习
前端·学习·webpack
一只帆記1 小时前
HTTP、WebSocket、SSE 对比
websocket·http
Bright16682 小时前
mkcert实现本地https
网络协议·http·https
hgdlip2 小时前
重启路由器ip不变怎么回事?原因分析与解决方法
网络协议·tcp/ip·智能路由器
锐成19192 小时前
FTPS、HTTPS、SMTPS以及WebSockets over TLS的概念及其应用场景
网络协议·https·ssl
leona_nuaa2 小时前
关于udp——mqtt运行注意事项
网络·网络协议·udp
虾球xz2 小时前
CppCon 2015 学习:Concurrency TS Editor’s Report
开发语言·c++·学习
Moonnnn.2 小时前
【电赛培训课程】运算放大器及其应用电路设计
笔记·学习
2501_915921433 小时前
高敏感应用如何保护自身不被逆向?iOS 安全加固策略与工具组合实战(含 Ipa Guard 等)
websocket·网络协议·tcp/ip·http·网络安全·https·udp