未在iPhone的Chrome和Firefox中设置Javascript提取Cookie

时间:2018-10-24 09:23:40

标签: javascript reactjs cookies cors fetch

我正在尝试了解大学项目的这种行为。

我已经在Google Cloud上部署了一个React Web应用程序,还在Google Cloud上部署了Go服务器。

Web应用程序使用我的Go服务器提供的API。

在桌面环境和Android智能手机上使用 Chrome Firefox 浏览器时,该应用似乎运行良好,但是当我在iOS(iPhone8 )API调用不包含我在Go服务器上对用户进行身份验证所需的cookie 。 Safari的效果也不错,因此我只能在iPhone上的Chrome和Firefox上看到此行为

这些是在同一API上两次调用的标头,第一次是使用Safari,第二次是使用Firefox:

Safari(iOS 12.0.1)

GET /example/users HTTP/1.1
Host: api-server.com
Connection: close
Accept-Language: en-gb
Cookie: default=MTU0MDM3MTA0... /*COOKIE IS SET HERE*/
Dnt: 1
Origin: https://example.com
Referer: https://example.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_0_1 like Mac OS X) 
            AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 
            Mobile/15E148 Safari/604.1
X-Cloud-Trace-Context: 38640...

Firefox(v14.0)

GET /example/users HTTP/1.1
Host: api-server.com
Connection: close
Accept-Language: en-gb
Origin: https://example.com
Referer: https://example.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_0_1 like Mac OS X) 
            AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/14.0b12646 
            Mobile/16A404 Safari/605.1.15
X-Cloud-Trace-Context: cb5ff...

当我使用提取发送请求时,我设置了选项凭据:“包含” ,但是如您所见,第二次调用未设置我需要的cookie ...

我想念什么?

谢谢您的帮助

1 个答案:

答案 0 :(得分:2)

我认为您可能遇到了this issue

关键要点是:

  

Safari附带了一种保守的cookie策略,该策略将cookie写入限制为仅由用户选择(“导航到”)页面。这种默认的保守策略可能会使尝试编写Cookie并失败的基于框架的站点感到困惑。

一个复杂的解决方法是使用iframe加载设置cookie的页面,而不是使用JavaScript。 Read more about it here

取决于您要实现的目标,也许一开始cookie并不是您所需要的。例如,当我遇到同样的问题时,我最终改为使用Fingerprintjs2 –但我只希望使用cookie进行遥测。指纹识别绝对不适合Cookie可以涵盖的所有用例。