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 小时前
【Golang学习之旅】gRPC 与 REST API 的对比及应用
java·开发语言·后端·学习·云原生·golang
蝈蝈ly1 小时前
WPF学习
学习·wpf
L_Whhjjj2 小时前
c语言函数学习
c语言·学习
朝屯暮蒙vi3 小时前
(五)Spring Boot学习——spring security +jwt使用(前后端分离模式)
spring boot·学习·spring·spring security
keep-learner3 小时前
Unity Dots理论学习-5.与ECS相关的概念
学习·unity·游戏引擎·ecs
羊小猪~~4 小时前
MYSQL学习笔记(七):新年第一篇之子查询
数据库·笔记·后端·sql·学习·mysql·考研
siy23335 小时前
[c语言日记]动态规划入门:杨辉三角
c语言·开发语言·笔记·学习·算法·动态规划
bylander5 小时前
【AI学习】DeepSeek为什么强?
人工智能·gpt·学习
西猫雷婶5 小时前
python学opencv|读取图像(六十一)先后使用cv2.dilate()函数和cv2.erode()函数实现图像处理
python·opencv·学习
luckilyil5 小时前
RabbitMQ学习—day2—安装
学习·rabbitmq·ruby