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

相关推荐
清水加冰13 分钟前
【Linux网络】HTTPS
网络·网络协议·https
酷熊代理36 分钟前
软路由如何屏蔽国外IP?RouterOS保姆级实战教程(附自动化脚本)
运维·网络协议·tcp/ip·自动化·智能路由器·软路由·小猫pptp
Dann Hiroaki1 小时前
文献分享: 对ColBERT段落多向量的剪枝——基于学习的方法
学习·算法·剪枝
Test.X1 小时前
学习15天:pytest
学习·pytest
小呀小萝卜儿1 小时前
2025-03-13 学习记录--C/C++-PTA 练习2-3 输出倒三角图案
c语言·学习
太阳吖2 小时前
学习笔记之注册用户如何防止缓存穿透
笔记·学习·缓存
叶域2 小时前
ClickHouse总体学习
学习·clickhouse
希望_睿智3 小时前
C++网络编程之字节序
c++·网络协议
大白的编程日记.3 小时前
【Git学习笔记】Git结构原理及其分支管理模型分析
笔记·git·学习
热爱前端的小张3 小时前
第四章 网络层(上)
网络协议