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

相关推荐
虾球xz24 分钟前
游戏引擎学习第273天:动画预览
c++·学习·游戏引擎
香蕉可乐荷包蛋1 小时前
Python学习之路(玖)-图像识别的实现
开发语言·python·学习
小虎卫远程打卡app1 小时前
视频编解码学习三之显示器续
学习·计算机外设·视频编解码
想不明白的过度思考者2 小时前
为了结合后端而学习前端的学习日志(1)——纯CSS静态卡片案例
前端·css·学习
小石(努力版)2 小时前
嵌入式STM32学习——振动传感器控制继电器开关灯
stm32·嵌入式硬件·学习
jz_ddk2 小时前
[学习]RTKLib详解:convkml.c、convrnx.c与geoid.c
c语言·开发语言·学习
小鹿撞出了脑震荡2 小时前
汇编学习——iOS开发对arm64汇编的初步了解
汇编·学习·ios
兴达易控2 小时前
E+H流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯
网络协议
小鹿撞出了脑震荡2 小时前
「OC」源码学习—— 消息发送、动态方法解析和消息转发
学习·ios·objective-c
茯苓gao3 小时前
stm32 串口通讯 和 USART学习 二(HEX和文本数据包收发)
stm32·嵌入式硬件·学习