被问到某天某位用户有没有同意过统计,后台只有一个当前状态,没有时间、没有政策版本,也没有来源页,翻遍数据库拼不出这条记录。日志里能对上时间点,这种反而好排。
前端把同意值存在浏览器本地,服务端根本没有落库,用户换设备或者清缓存后记录就没了。政策改版之后,旧的同意也没法对应到当时同意的那一版条款。这一点先确认清楚,后面就不用反复试。
CREATE TABLE consent_log ( id BIGINT PRIMARY KEY AUTO_INCREMENT, uid VARCHAR(64), ver VARCHAR(16), action TINYINT, created_at DATETIME );
「同意记录留存」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
处理上按这个顺序:同意动作单独发一个接口,把匿名 ID、政策版本、时间戳、来源页写进 consent_log 表;表只追加不更新,撤销同样记一条,保留完整操作序列;保留期限一起写进去,到期由定时任务归档,别让它无限长。
结果对不对很好判断,点一次同意,表里多一行带时间和版本的记录,撤销后再多一行,两条都能查到来源页。
