仅为同意条款的用户存储 cookie

Posted

技术标签:

【中文标题】仅为同意条款的用户存储 cookie【英文标题】:Store cookies only for users who agreed to terms 【发布时间】:2022-01-11 04:23:00 【问题描述】:

为了遵守 GDPR 而没有烦人的 cookie 横幅,我希望我网站上的公共页面不存储 cookie。为了方便注册用户的旅程,我想使用闪信。问题是这两个似乎不兼容,因为设置会话:

const session = require('express-session');
// Initialize mongodb session storage to remember users.
const store = new MongoDBStore(
  uri: config.mongoUri,
  // The 'expires' option specifies how long after the last time this session was used should the session be deleted.
  // Effectively this logs out inactive users without really notifying the user. The next time they attempt to
  // perform an authenticated action they will get an error. This is currently set to 3 months (in milliseconds).
  expires: max_session_ms,
);


// Enable sessions using encrypted cookies
app.use(
  session(
    cookie: 
      // Specifies how long the user's browser should keep their cookie, probably should match session expiration.
      maxAge: max_session_ms,
      sameSite: "strict",
    ,
    store: store,
    secret: config.secret,
    signed: true,
    resave: false,  // Unknown effect. See https://github.com/expressjs/session#resave
    saveUninitialized: false,  // Save only explicitly, e.g. when logging in.
    httpOnly: true,  // Don't let browser javascript access cookies.
    secure: config.secureCookies, // Only use cookies over https in production.
  )
);

并通过以下方式闪烁消息:

const flash = require("express-flash");  // Disabled to avoid cookies.
app.use(flash());

在浏览器中存储一个 cookie,并为公共页面提供一条空的 flash 消息。我不认为服务器端只存在闪存消息(请参阅Server-side only flash messages (no cookies))。我尝试设置res.locals,但它在重定向之间被删除。

是否可以仅为同意网站登录区域中的条款的访问者而不为一般访问者存储 cookie?

【问题讨论】:

有一个中间件来检查请求中是否存在accepted 参数?在其他中间件中尊重这个标志? . @Silvan Bregy 这可能适合某些用例。在我的情况下,我只想在为创建帐户并接受条款的用户保留的路由中使用 flash 请求。当我包含 flash 请求包时,我会为网站的公共区域保存 cookie,而不仅仅是注册用户的页面。 【参考方案1】:

关于您的问题的 3 条评论:

请求同意并非基于 GDPR,而是根据欧盟指令 2002/58/CE 的要求 此指令明确指出,如果您在用户浏览器上存储会话,则无需请求同意 从欧盟指令的角度来看,存储 cookie 或 flash 是相同的,如果需要将 cookie 替换为在用户浏览器中写入数据的任何内容,则无法避免请求同意 如果您不清楚规则,请查看 CNIL 的页面(法国数据权限保护),例如:https://www.cnil.fr/fr/nouvelles-regles-cookies-et-autres-traceurs-bilan-accompagnement-cnil-actions-a-venir

编辑:

对于每个人来说,为了明确何时需要同意,最好直接阅读指令的文本,非常清楚(第 5.3 条指令 ePrivacy 2002/58):

    成员国应确保使用电子通信网络存储信息或访问 存储在订户或用户的终端设备中的信息 只有在相关订户或用户是 提供有关处理目的的清晰和全面的信息(...), 并有权拒绝数据进行此类处理 控制器。这不应阻止任何技术存储或访问 执行或促进传输的唯一目的 通过电子通信网络进行通信,或作为 为提供信息社会服务所必需 订阅者或用户明确要求。

【讨论】:

所以我可以使用两个 cookie,一个在不需要同意的情况下在用户的浏览器上存储会话和 flash 消息,另一个只使用代码来识别创建帐户并将他们链接到我的数据库的用户。这是有道理的,是的。不过,我不确定 NodeJS 将如何处理两个单独的会话。 在会话管理方面,您不需要明确同意。例如,您需要明确同意广告或其他类似内容。但在这种情况下,会话(购物车会话)或访问会话超出了范围。其他情况是针对语言偏好,您可以在不征得同意的情况下存储 lang cookie。 啊,所以我理解您对 Flash 消息的想法(如果我理解正确的话,就像弹出消息):这些消息是关于什么的?如果他们是关于更新(例如:用户之间的对话),那么他们不需要同意。但是,如果您发送营销信息(例如:订阅我们的时事通讯),则需要征得同意 非常有用,谢谢。我使用闪存消息来处理错误。是的,它类似于弹出窗口和 Javascript 警报,只是它们在加载下一页后出现。例如看这个线程,用户在登录失败后看到一条错误消息:***.com/questions/15711127/…

以上是关于仅为同意条款的用户存储 cookie的主要内容,如果未能解决你的问题,请参考以下文章

你“同意”过最可怕的互联网霸王条款是?

青蛙三国志用户隐私条款(包括无内购版)

隐私政策

用户同意的 HTML5 地理位置自定义通知

隐私权政策

Cookie 同意弹出窗口不会在 IFrame 中消失