符合GDPR规范的Cookie同意逻辑实现相关技术问题咨询
问题1:登录用第一方会话Cookie是否需要Opt-in,未同意的用户是否要禁止登录,Express中有无相关通用标准?
仅用于登录会话的第一方Cookie属于必要Cookie范畴,欧盟ePrivacy指令明确规定这类为完成用户主动请求的服务所必需的Cookie,不需要用户主动Opt-in即可设置。
你完全可以在用户登录成功后直接设置该会话Cookie,不需要提前获得用户同意,也不用禁止未接受Cookie的用户登录,这类用途的Cookie不在合规要求的需授权范围内。
Express中没有专门的“仅用户同意后才设置Cookie”的官方标准,对于这类必要Cookie,你直接用cookie-parser中间件,登录成功时调用res.cookie('sessionId', 会话值, { httpOnly: true, sameSite: 'strict' })正常设置即可,不需要额外的判断逻辑。
问题2:用户拒绝Cookie时,拒绝状态存在哪,用Cookie存是否违反同意原则?
可以用专门的Cookie存储用户的拒绝/同意状态,这种做法完全合规,不违反用户同意原则。
因为这个仅存储同意状态的Cookie也属于必要Cookie,它的唯一作用是记录用户的选择,避免重复弹出授权弹窗,属于履行合规要求的必需组件,不在用户拒绝的“非必要Cookie”范围内。你只需要在你的Cookie政策中明确告知用户该Cookie的存在、作用和有效期即可。
如果不想用Cookie,也可以把状态存在localStorage里,但缺点是用户清除浏览器本地数据后状态会丢失,还是会重复弹窗,体验更差。
问题3:用户接受授权后,能否用Cookie存同意状态避免每次弹窗,有没有更优方案?
这就是目前行业通用的标准实现方案,完全可以这么做。
你可以在这个状态Cookie里存二进制值,也可以存更细粒度的同意分类(比如是否同意 analytics 类Cookie、是否同意营销类Cookie),甚至可以附带后续要用到的政策版本号,这个Cookie本身属于必要Cookie,不受用户同意非必要Cookie的限制。
如果你的站点有用户体系,也可以把用户的同意状态同步存储在服务端的用户属性中,这样用户换设备登录的时候不需要重复授权,但对于未登录的游客用户,Cookie还是适用范围最广的最优方案。
问题4:后续新增Cookie时,如何给之前已同意的用户重新弹授权?有没有适配Express+React栈的优质实现资源?
你只需要在存储用户同意状态的时候,额外附带一个Cookie政策版本号即可。比如当前的Cookie政策版本是v1,用户同意后存储的状态里就带上版本标识,等你后续新增了Google Analytics这类非必要Cookie,把政策版本升级到v2,前端初始化时判断用户本地存储的版本号小于v2,就自动重新弹出授权窗口让用户重新确认即可。
适配Express+React栈的实现参考逻辑:
- Express端可以用
cookie-parser中间件处理所有Cookie的读写,封装一个全局的同意状态校验中间件,所有非必要Cookie的写入操作都要先校验用户是否同意了对应分类的Cookie,校验通过才允许写入。 - React端可以单独封装一个全局的Cookie同意弹窗组件,挂载在应用的根节点下,初始化时先读取本地的同意状态和版本号,不符合要求就自动触发弹窗。
你可以在主流开源代码托管平台搜索相关的成熟组件和中间件,有很多开箱即用的实现可以参考,不需要从零开发。
内容的提问来源于stack exchange,提问作者mcclosa

