【问题标题】:Session cookie not deleted on IOS tablet and smartphoneIOS 平板电脑和智能手机上的会话 cookie 未删除
【发布时间】:2021-04-28 09:16:12
【问题描述】:

使用node.js express库在注销时清除cookie

app.post('/logout', (req, res, next) => {
// cookie-session library used hence req.session = null is valid
            req.session = null;
            res.clearCookie('auth');
            res.end();
    });

在所有台式机、Android 设备上完美运行,但在 IOS 设备浏览器(Firefox、Chrome、Safari 等)上不适用。 所有IOS测试设备都是14+版本

尝试了clearCookie res.clearCookie function doesn't delete cookies 的可用选项,但无济于事。

但是,在 IOS 设备上使用隐身模式意味着 cookie 被清除,关闭浏览器(清除会话)也可以。

设置cookie(登录)时我使用默认的

res.cookie('auth')

有人知道发生了什么吗?

编辑

在 Iphone 5c 上尝试了 IOS 10,它可以工作。似乎真的是 14+ 的问题

【问题讨论】:

  • 您能说明一下您是如何设置 cookie 的吗?
  • 我不是在上面的例子中做过吗?我的 document.cookie 在 res.clearCookie('auth'); 之后自动被清除。适用于除 IOS 14+ 以外的所有设备

标签: javascript node.js express cookies session-cookies


【解决方案1】:

一些背景信息。根据 HTTP 规范,没有办法删除 cookie。清除cookie的常用做法是将过期时间设置为过去的某个时间(express中的clearCookie函数就是采用这种做法)

clearCookie()的源码

res.clearCookie = function clearCookie(name, options) {
  var opts = merge({ expires: new Date(1), path: '/' }, options);
  return this.cookie(name, '', opts);
}

问题可能与 IOS 14 中的新隐私功能导致的 cookie 设置问题有关,这意味着对允许设置的 cookie 有非常严格的政策。可能是 IOS 14 中不允许使用“clearCookie”使用的“设置过期”方法。查看更多关于 IOS 14 中的新隐私功能here

顺便说一句,一定要检查“选项”对象中的“路径”属性是否正确

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2013-04-14
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多