【发布时间】:2017-07-10 21:56:17
【问题描述】:
我正在调试一个 cookie 设置问题,该问题仅在 iOS 上的 Chrome 和 Safari 中重现。下面的代码块在 OSX 上的 Chrome/Safari/Firefox 上运行良好:
if (navigator.userAgent.indexOf('iPad') > -1) {
window.onpagehide = placeCookie
} else {
window.onbeforeunload = placeCookie
}
function placeCookie () {
if (isAuthenticated()) {
var cookie = 'cookieName=' + token + '; max-age=60'
if (env === 'prod') {
cookie += '; secure'
}
document.cookie = cookie
}
}
此代码用于在窗口检测到导航时放置一个 cookie。在我们的例子中,因为它是 angularjs,我们正在监听页面重新加载,并且我们希望该 cookie 与请求一起使用。
重新加载代码:window.location.reload(true)
为了开发,我使用 Charles Proxy 来嗅探 cookie,并检查节点服务器上的 cookie,因为 safari 检查器在页面重新加载时关闭。当我重新打开检查器窗口时,我可以看到在浏览器中设置了 cookie,但服务器或 Charles 都看不到 cookie。这是 iPad 上 safari 检查器的 cookie 粘贴(server/charlesproxy 看不到):
Name Value Domain Path Expires
cookieName token localhost.charlesproxy.com / 7/10/2017, 11:23:13 PM 39
当我在其他浏览器上单步执行时,cookie 随处可见。
有人知道 iOS 不承认 cookie 的任何原因吗?是否有可能在放置 cookie 之前在 iOS 上发出请求?
如果我可以提供更多信息,请告诉我。
【问题讨论】:
-
为了清楚起见,您试图在他们导航到不同页面之前设置 cookie,并且 cookie 没有在下一页请求中发送?
-
这是我们正在监听的页面重新加载,因为它是一个 SPA,但除此之外,您是正确的。
-
如何重新加载页面?
-
window.location.reload(true)
标签: javascript ios google-chrome cookies mobile-safari