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

DRF匿名用户标识问题:如何获取提交问卷的匿名用户唯一ID

匿名用户唯一标识符获取方案

方案1:客户端生成持久化UUID存储

  • 前端首次进入问卷页面时,生成合规的UUID v4字符串,存入浏览器的localStorage/IndexedDB中,同时写入30天以上有效期的cookie
  • 提交问卷时,前端将该UUID作为anonymous_id字段一起传入接口
  • 后端直接接收该字段入库即可,无需额外生成逻辑

注意:该方案兼容性最好,用户清除浏览器数据后才会丢失标识,适合不需要高精准度识别的场景

方案2:后端基于请求特征生成指纹

  • 后端提取请求的IP地址、User-Agent、Accept-Language三个核心特征,拼接后用md5/sha256哈希生成固定长度的唯一标识
  • 示例代码:
import hashlib
from rest_framework.request import Request

def generate_anonymous_fingerprint(request: Request) -> str:
    feature = f"{request.META.get('REMOTE_ADDR')}{request.META.get('HTTP_USER_AGENT')}{request.META.get('HTTP_ACCEPT_LANGUAGE', '')}"
    return hashlib.sha256(feature.encode('utf-8')).hexdigest()

注意:同局域网下相同设备配置的用户可能出现标识重复,适合作为辅助校验字段,不建议作为唯一主键使用

方案3:后端下发会话标识

  • 匿名用户首次访问问卷接口时,后端生成UUID存入Django的session中,设置会话过期时间为90天
  • 后续所有请求都会自动携带sessionid,后端直接取request.session.session_key或者预先存入session的anonymous_id即可
  • 该方案不需要前端做额外存储逻辑,标识完全由后端管控,安全性更高

注意:需要确保DRF的SessionMiddleware正常开启,用户禁用cookie时会失效

选择建议

如果你的问卷允许跨设备提交、对重复提交校验要求不高,选方案1即可;如果需要管控重复提交、避免前端伪造标识,优先选方案3,搭配方案2的指纹做重复校验即可。

内容的提问来源于stack exchange,提问作者Эмиль Хазиев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:18:01