You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中HTTPOnly Cookie的持久化与Token验证问题咨询

一、Token的持久化机制

  • 当服务器返回带Set-Cookie响应头的登录成功结果后,浏览器会自动将这个Cookie保存到本地存储,不需要前端做任何额外操作。
  • 你设置的Cookie属性会约束它的存储和传输行为:
    • Secure:仅在HTTPS请求场景下,浏览器才会把该Cookie发送给服务器,避免明文传输导致Token泄露。
    • HttpOnly:禁止前端通过document.cookie读取该Cookie,能有效防范XSS攻击窃取Token。
    • Path=/:表示该Cookie对网站所有路径的请求都生效,同域名下的任意请求,浏览器都会自动携带这个Cookie。
  • 只要用户不主动清除浏览器Cookie,且Cookie未达到你设置的过期时间(可通过set_cookie的max_age或expires参数配置),Token就会一直保存在浏览器中,后续同域名请求都会自动带上。

二、后续请求的Token验证流程

你的装饰器已经完成了Token的第一步获取,接下来补充完整的验证逻辑:

  1. 检查Token是否存在:你已实现这一步,若request.cookies.get("PPS-Token")返回空,直接返回错误响应(注意要返回build_response的结果,不能仅调用函数):

    if not token:
        return build_response(status="error", message="Invalid Token...Contact Support")
    
  2. 验证Token合法性:

    • 如果是JWT格式的Token,需验证签名有效性和过期时间:
      import jwt
      from jwt.exceptions import ExpiredSignatureError, InvalidSignatureError
      
      try:
          # 替换为你的JWT密钥
          payload = jwt.decode(token, "your-secret-key", algorithms=["HS256"])
          user_id = payload.get("user_id")
      except ExpiredSignatureError:
          return build_response(status="error", message="Token已过期,请重新登录")
      except InvalidSignatureError:
          return build_response(status="error", message="Token无效,请重新登录")
      
    • 如果是自定义存储的Token(比如存在数据库的随机字符串),需查询数据库验证有效性:
      from datetime import datetime
      # 假设你有Token模型,存储user_id、token_str、expire_time字段
      token_record = Token.query.filter_by(token_str=token).first()
      if not token_record:
          return build_response(status="error", message="Token无效")
      if token_record.expire_time < datetime.now():
          return build_response(status="error", message="Token已过期")
      # 获取关联用户信息
      user = User.query.get(token_record.user_id)
      if not user:
          return build_response(status="error", message="用户不存在")
      
  3. 传递用户信息到视图函数:验证通过后,可将用户信息注入请求上下文,方便后续视图使用:

    from flask import g
    
    g.user = user
    # 执行原视图函数
    return f(*args, **kwargs)
    

内容的提问来源于stack exchange,提问作者Elcid_91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:27:27