Safari不会随机发送XMLHTTPRequest cookie

时间:2019-10-29 12:29:40

标签: express safari xmlhttprequest passport.js express-session

我有一个使用PassportJS身份验证的Express服务器。我正在使用标准XMLHTTPRequests检索文件。

Chrome和Firefox可以正常工作。 Safari(Mac和iOS)无法发送带有某些请求的请求Cookie,并且操作不一致。

记录的失败请求都具有未经PassportJS身份验证的不同会话ID。

Chrome和Firefox的所有请求都有一个会话ID。

我没有使用跨域请求,这些都是相同源的。我曾尝试使用withCredentials true和相同的结果,但是无论如何都不需要此属性,因为它是同源的,Chrome和Firefox在没有它的情况下也可以使用。

似乎没有一种模式无法将文件发送请求Cookie失败。有时随机(但很少),所有请求都可以正常加载。

这不是顺序失败,大多数请求先从失败开始,然后是一系列失败,中间又发生一些成功。

Express服务器不会破坏会话,它们会不断累积。失败的请求具有未通过身份验证的会话的会话ID。

什么会导致Safari随机不发送某些XMLHTTPRequest的请求cookie?

1 个答案:

答案 0 :(得分:0)

原来是crossOrigin属性,我必须一直在进行跨域请求:

https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes

大多数已加载文件的crossOrigin属性设置为“匿名”。由于某些原因,Chrome和Firefox似乎忽略了这一点,无论如何都发送了cookie凭据,但Safari却没有。将此属性设置为“ use-credentials”可以正常工作:

img.crossOrigin =“使用凭证”;