Flask 的session对象实际上是把数据加密后存储在客户端的 Cookie 中名为session。只要客户端每次请求都携带这个 Cookie服务端就能还原出会话数据。from flask import Flask, session, request, jsonify app Flask(__name__) # 必须设置 secret_key用于对 session cookie 签名防止篡改 app.secret_key super-secret-key-change-me app.route(/login, methods[POST]) def login(): 登录接口接收 username写入 session username request.form.get(username) if not username: return jsonify({error: username is required}), 400 session[user] username session[visit_count] 0 # 初始化访问计数器 return jsonify({message: fLogin successful, welcome {username}}) app.route(/logout, methods[POST]) def logout(): 登出接口清除 session 中的 user session.pop(user, None) return jsonify({message: Logged out}) app.route(/profile, methods[GET]) def profile(): 查看登录状态 user session.get(user) if user: return jsonify({user: user, status: logged in}) return jsonify({message: Not logged in}), 401 app.route(/data, methods[GET]) def get_data(): 需要登录才能访问的数据并记录访问次数 if user not in session: return jsonify({message: Unauthorized}), 401 session[visit_count] 1 return jsonify({ data: This is protected data, visit_count: session[visit_count] }) if __name__ __main__: app.run(debugTrue)import requests # 创建一个会话对象它会自动管理 Cookies 和连接池 s requests.Session() BASE_URL http://127.0.0.1:5000 print( 1. 未登录直接访问 profile ) resp s.get(f{BASE_URL}/profile) print(fStatus: {resp.status_code}, Body: {resp.json()}) print(\n 2. 发送 POST 请求登录 ) resp s.post(f{BASE_URL}/login, data{username: Alice}) print(fStatus: {resp.status_code}, Body: {resp.json()}) print(\n 3. 登录后再次访问 profile ) resp s.get(f{BASE_URL}/profile) print(fStatus: {resp.status_code}, Body: {resp.json()}) print(\n 4. 多次访问 /data观察计数器 ) for i in range(3): resp s.get(f{BASE_URL}/data) print(f第{i1}次访问: {resp.json()}) print(\n 5. 登出 ) resp s.post(f{BASE_URL}/logout) print(fStatus: {resp.status_code}, Body: {resp.json()}) print(\n 6. 登出后再访问 profile ) resp s.get(f{BASE_URL}/profile) print(fStatus: {resp.status_code}, Body: {resp.json()}) # 查看当前 Session 中保存的 Cookies print(\n 当前 Session 中的 Cookies ) print(s.cookies.get_dict())Flask Session 的特点存储位置在客户端 Cookie服务端通过secret_key签名保证数据不被篡改。如果不希望暴露数据到客户端可以使用Flask-Session扩展将 Session 存到 Redis 等服务器端。requests.Session做了什么自动管理 Cookie第一次请求收到Set-Cookie后后续请求都会自动带上Cookie头无需手动处理。连接复用底层urllib3会维护连接池对同一主机的多次请求会复用 TCP 连接减少三次握手开销可抓包验证。保持其他参数同一个 Session 可以统一设置 headers、auth 等对所有请求生效。